IF 内的错误级别

问题描述 投票:0回答:2

刚刚偶然发现了一件奇怪的事情,并想看看是否有人知道原因以及是否有办法解决它。本质上,似乎在 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

相关文章:

    ERRORLEVEL 不是 %ERRORLEVEL%
  • 测试批处理文件中的特定错误级别 (69576)
batch-file errorlevel
2个回答
51
投票
@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



1
投票
@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 ...

© www.soinside.com 2019 - 2024. All rights reserved.