@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-dFOR /fdir /b ...%%iLBL04%STORE%*.DTAtargettargetif not defined
如果没有匹配的文件,则target不会被定义(它在第一个for循环中被删除),因此可能会产生错误消息。
否则,将文件连接到test.txt然后move语句实际上replaces是文件“ %target%(我们知道存在)与连接的版本。
最后两行中的>nul每一行都抑制消息“复制/移动了 1 个文件”
任务完成!新文件TYPED作为证据