与%ERRORLEVEL%
偶然发现了一个奇怪的事情,想知道是否有人知道为什么以及是否有办法解决它。从本质上讲,似乎if语句中执行的命令不会设置%ERRORLEVEL%
变量。 ERRORLEVEL
(在IF ERRORLEVEL 1
中,与IF %ERRORLEVEL% EQU 1
不同)检查似乎仍然可以正常工作,所以我可以解决它,但它仍然很好能够打印错误级别。用于调试或其他。
@echo off
Set TESTVAR=1
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
IF %TESTVAR% EQU 1 (
Set ERRORLEVEL=
tasklist | find /I "IsntRunning.exe" > NUL
echo INSIDE_IF ERRORLEVEL %ERRORLEVEL%
IF ERRORLEVEL 1 (
echo INSIDE_IF2 ERRORLEVEL GREQ 1 %ERRORLEVEL%
)
IF ERRORLEVEL 2 (
echo INSIDE_IF2 ERRORLEVEL GREQ 2 %ERRORLEVEL%
)
IF ERRORLEVEL 3 (
echo INSIDE_IF2 ERRORLEVEL GREQ 3 %ERRORLEVEL%
)
)
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF ERRORLEVEL %ERRORLEVEL%
@echo on
将其放入批处理文件并运行它会产生以下输出:
C:\ Users \用户名\文件\工作> test.bat的
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'无法识别为内部或外部命令, 可操作程序或批处理文件 OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'无法识别为内部或外部命令, 可操作程序或批处理文件 INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1
相关文章:
答案 0 :(得分:40)
尝试在批处理文件开头使用setlocal enabledelayedexpansion
,在!ERRORLEVEL!
内使用IF
。这似乎对我有用:
@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
urklbkrlksdj - not a command
echo %ERRORLEVEL%
echo !ERRORLEVEL!
)
答案 1 :(得分:0)
if errorlevel
的工作方式没有延迟扩展,但其工作方式类似于
if %errorlevel% <= Some_Value ...
:
@echo off
::sets errorlevel to 0
(call )
if "1" == "1" (
rem sets errorlevel to 5
cmd /c exit 5
if errorlevel 4 echo this will be printed
if errorlevel 5 echo this will be printed
rem :::: you can use this ::::::::::::::
if errorlevel 5 if not errorlevel 6 echo this will be printed ONLY when the errorlevel is 5
rem :::::::::::::::::::::::::::::::::::::
if errorlevel 6 echo this will not be printed
)