@ECHO OFF
SETLOCAL
FOR %%i IN (store name address
city state zip
special target) DO (SET %%i=)
set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
FOR %%i IN (store name address
city state zip
special) DO IF NOT DEFINED %%i (SET %%i= )
(
ECHO.%NAME%
ECHO.%ADDRESS%
ECHO.%CITY% %STATE% %ZIP%
ECHO.%SPECIAL%
) > address.txt
FOR /f %%i IN (
'dir /b /a-d /o-d lbl04%store%*.dta'
) DO IF NOT DEFINED target SET target=%%i
IF NOT DEFINED target ECHO LBL04%STORE%*.DTA NOT found&GOTO :EOF
copy address.txt+%target%=test.txt >nul
MOVE test.txt %target% >nul
type %target%
显然,您应该首先针对真实数据的副本而不是实时数据尝试此操作。
第一个FOR
确保列表中的变量名称从环境中删除,以便如果它们具有现有值然后enter
在任何提示处按下,该值将被保留。
第二个FOR
循环确保每个输入的变量都有一个值。请注意,target
不包含在此组中。=
和之间有一个空格)
。
通过简单的SET
指令,空格很重要。语法(SET var=)
或等效方法SET "var="
确保变量var
设置为 [nothing]。问题SET var=
是一些编辑器在行上留下终端空间,在这种情况下,var
将被设置为那些终端空间——而且它们有点难以看到。此外,SET var =...
将设置变量“ var
”而不是变量“ var
”——但那是另一个故事。
请注意,这些ECHO
语句现在在 . 之后直接有一个点ECHO
。该语句ECHO
或ECHO
将导致ECHO
报告其状态,ECHO is off
并将出现在输出中。添加“ .
”ECHO
可以让人咀嚼,它会产生超出.
下一条语句中的指令以基本形式(仅文件名)dir
生成目录列表,并且不以逆日期顺序生成目录名称。这是一种逐行读取指令输出的机制。下一行“输入”读取的内容应用于每次迭代。因此,遇到的第一个文件名匹配将被 SET 到,并且由于现在已设置,因此任何进一步的行都将因为门而被忽略。/b
/a-d
/o-d
FOR /f
dir /b ...
%%i
LBL04%STORE%*.DTA
target
target
if not defined
如果没有匹配的文件,则target
不会被定义(它在第一个for
循环中被删除),因此可能会产生错误消息。
否则,将文件连接到test.txt
然后move
语句实际上replaces
是文件“ %target%
(我们知道存在)与连接的版本。
最后两行中的>nul
每一行都抑制消息“复制/移动了 1 个文件”
任务完成!新文件TYPED
作为证据