刚刚偶然发现了一件奇怪的事情,并想看看是否有人知道原因以及是否有办法解决它。本质上,似乎在 if 语句内执行的命令没有设置
%ERRORLEVEL%
变量。 %ERRORLEVEL%
(如 ERRORLEVEL
,与 IF ERRORLEVEL 1
不同)检查似乎仍然工作正常,所以我可能可以解决它,但能够打印错误级别仍然很好。用于调试或其他什么。IF %ERRORLEVEL% EQU 1
将其放入批处理文件并运行它会产生以下输出:
C:\Users\用户名\Documents\work>test.bat
OUTSIDE_IF 1相关文章:'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
INSIDE_IF 错误级别 9009
INSIDE_IF2 错误级别 GREQ 1 9009
OUTSIDE_IF 错误级别 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
,并在
setlocal enabledelayedexpansion
中使用 !ERRORLEVEL!
。这似乎对我有用:IF
@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
urklbkrlksdj - not a command
echo %ERRORLEVEL%
echo !ERRORLEVEL!
)
工作时不会延迟扩展,但工作方式类似于
if errorlevel
:
if %errorlevel% <= Some_Value ...