命令
type nul > C:\does\not\exist\file.txt
使用不存在的路径调用会在重定向失败时终止,并且type
根本不会被调用。因此它没有机会设置ERRORLEVEL
。由 shell 执行的重定向不会设置ERRORLEVEL
.
ERRORLEVEL
一种解决方案是使用非零值进行预初始化。失败时它将保持不变,type
成功时将重置为零(按 ):
@echo off
::pre-initialise ERRORLEVEL with a value of 1:
call :SETERROR 1
type NUL > NOSUCHDIR\test.txt
IF ERRORLEVEL 1 goto ERROR
echo All is well.
goto END
:ERROR
echo Error detected.
:END
goto :eof
:SETERROR
exit /b %1
短形式
type NUL > NOSUCHDIR\test.txt && goto OK || goto ERROR
之所以有效,是因为它分析退出代码,这与错误级别不同:
可以使用重定向运算符直接检测退出代码(成功/失败忽略ERRORLEVEL
),这通常比信任可能更可靠ERRORLEVEL
,也可能未正确设置。
Herbert Kleebauer在 Usenet小组中向我解释了这一点。alt.msdos.batch
更新:
一位匿名用户根据以下COPY
命令提出了替代解决方案:
COPY NUL: C:\does\not\exist\file.txt
这个命令确实 set ERRORLEVEL
,可以通过脚本中的下一个命令来分析。非常方便,所以我感谢他提议的编辑。