%ERRORLEVEL%
で奇妙なことに偶然遭遇し、誰かがその理由を知っているかどうか、そしてそれを修正する方法があるかどうかを確認したいと思っていました。基本的に、ifステートメントが%ERRORLEVEL%
変数を設定しない場合、コマンドはifコマンドの内部で実行されているように見えます。 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\username\Documents\work> test.bat
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'は、内部または外部のコマンド、操作可能なプログラム、またはバッチファイルとして認識されません。
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'は、内部または外部のコマンド、操作可能なプログラム、またはバッチファイルとして認識されません。
INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1
関連記事:
バッチファイルの先頭でsetlocal enabledelayedexpansion
を使用し、IF
内で!ERRORLEVEL!
を使用してみてください。これは私にとってはうまくいくようです:
@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
urklbkrlksdj - not a command
echo %ERRORLEVEL%
echo !ERRORLEVEL!
)