@ECHO OFF
SETLOCAL
DEL output.txt 2>nul
REM Loop through each line of input.txt
FOR /F "tokens=1-3 delims=, " %%i IN (.\ready\input.txt) DO (
ECHO.
ECHO.
ECHO.
ECHO Check %%i exists, set error flag if it doesnt
if exist .\ready\%%i (set "errorflag=") ELSE (set errorflag=2)
CALL echo return code is %%errorflag%%
ECHO Run %%i if it exists
if NOT DEFINED errorflag (
call .\ready\%%i
ECHO Move %%i to archive if no error occured
if errorlevel 1 (SET errorflag=3) ELSE (ECHO copy .\ready\%%i .\archive\%mydate%_%mytime%_%%j_%%k_%%i)
)
ECHO Copy line of text to the new output.txt file if an error occured
if DEFINED errorflag >>output.txt ECHO %%i, %%j, %%k
)
GOTO :EOF
这是一个重写的程序 .
注意: output.txt 在开始时被删除,否则 >> 将附加到任何现有文件 . 2>nul 如果删除失败(例如文件不存在),则会抑制错误消息
在块语句 (a parenthesised series of statements) 中,解析ENTIRE块并执行 THEN . 在块执行之前,块中的任何_844785都将被该变量的值 AT THE TIME THE BLOCK IS PARSED 替换 .
因此, IF (something) else (somethingelse) 将在遇到 IF 时使用 %variables% 的值执行 .
解决此问题的两种常用方法是1)使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问 var 或2的中间值,以调用子例程以使用更改的值执行进一步处理 .
因此请注意 CALL ECHO %%var%% 的使用,它显示 var 的更改值 . CALL ECHO %%errorlevel%% 显示,但遗憾的是RESETS错误级别 .
如果 var 是 CURRENTLY ,则 IF DEFINED var 为真 .
ERRORLEVEL 是一个特殊的可变形名称 . 它由系统设置,但如果由用户设置,则用户指定的值将覆盖系统值 .
如果 errorlevel 是n OR GREATER THAN n ,则 IF ERRORLEVEL n 为TRUE . IF ERRORLEVEL 0 因此总是如此 .
语法 SET "var=value" (其中value可以为空)用于确保行末尾的任何杂散空格不包含在指定的值中 .
所需命令仅用于测试目的 . 在确认命令正确后,将 ECHO COPY 更改为 COPY 以实际复制文件 .
我使用了以下 input.txt :
seterr1.bat, J1, K1
seterr5.bat,J2,K2
seterr0.bat,J3 K3
seterr5.bat, J4, K4
notexist.bat, J5, K5
使用包含的现有文件 seterr*.bat
@ECHO OFF
EXIT /b 1
(最后一行中的 1 确定 errorlevel 返回)
并收到结果输出:
Check seterr1.bat exists, set error flag if it doesnt
return code is
Run seterr1.bat if it exists
Move seterr1.bat to archive if no error occured
Copy line of text to the new output.txt file if an error occured
Check seterr5.bat exists, set error flag if it doesnt
return code is
Run seterr5.bat if it exists
Move seterr5.bat to archive if no error occured
Copy line of text to the new output.txt file if an error occured
Check seterr0.bat exists, set error flag if it doesnt
return code is
Run seterr0.bat if it exists
Move seterr0.bat to archive if no error occured
copy .\ready\seterr0.bat .\archive\__J3_K3_seterr0.bat
Copy line of text to the new output.txt file if an error occured
Check seterr5.bat exists, set error flag if it doesnt
return code is
Run seterr5.bat if it exists
Move seterr5.bat to archive if no error occured
Copy line of text to the new output.txt file if an error occured
Check notexist.bat exists, set error flag if it doesnt
return code is 2
Run notexist.bat if it exists
Copy line of text to the new output.txt file if an error occured
请注意,COPY仅仅是我之前提到过的 .
和output.txt
seterr1.bat, J1, K1
seterr5.bat, J2, K2
seterr5.bat, J4, K4
notexist.bat, J5, K5