错误时调用不同的函数。Windows批处理

错误时调用不同的函数。Windows批处理,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个小脚本,可以检查文件夹中的新文件,并打印所有PDF文件。每当打印失败时,%errorlevel%变量将上升到1。我试图使用带有goto和标签的if语句使其工作,但我不知道发生了什么 剧本是: :printfile echo printing %1 set fname=%1 set fullFname="print\STW_Print\STW_Printer_TEST\%fname:~1% echo ERLVL: %errorlevel% "C:\Program Files (x86)\S

我有一个小脚本,可以检查文件夹中的新文件,并打印所有PDF文件。每当打印失败时,
%errorlevel%
变量将上升到1。我试图使用带有goto和标签的if语句使其工作,但我不知道发生了什么

剧本是:

:printfile
echo printing %1
set fname=%1
set fullFname="print\STW_Print\STW_Printer_TEST\%fname:~1%
echo ERLVL: %errorlevel%
"C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -silent -print-to "\\s8011\OPS_2055_IS" %
echo ERLVL: %errorlevel%
set logFilename=%DATE:~4,2%-%DATE:~7,2%-%DATE:~10,4%
if %errorlevel% neq 0 goto error
echo Moving %fname% to printed
move %fullFname% STW_printed
echo %time% %1 Printed on STWTEST and Moved>> Printlogs\TEST-%logFilename%-log.txt
goto eof
:error
echo Moving %fname% to failed
move %fullFname% STW_failed
echo %time% %1 Failed on STWTEST and Moved>> Printlogs\TEST-%logFilename%-log.txt
GOTO eof

:eof
调用脚本的行:

for /f "tokens=*" %%i in ('dir print\STW_Print\STW_Printer_TEST\*.pdf /b') do (call :printfile "%%i")
以及我的输出:

printing "BADTEST (2) - Copy.pdf"
ERLVL: 0
ERLVL: 1
Moving "BADTEST (2) - Copy.pdf" to printed
    1 file(s) moved.
printing "BADTEST (2).pdf"
ERLVL: 0
ERLVL: 1
Moving "BADTEST (2).pdf" to printed
    1 file(s) moved.
printing "BADTEST (3) - Copy.pdf"
ERLVL: 0
ERLVL: 1
Moving "BADTEST (3) - Copy.pdf" to printed
    1 file(s) moved.

我不明白为什么它没有走向失败。任何帮助都将不胜感激

这是因为在执行SET命令后检查errorlevel。。。这将清除错误级别。将“设置日志文件名…”行向上移动更远。此外,当使用errolevel时,您可以

if errorlevel 1 goto :error