で奇妙なことに遭遇し、%ERRORLEVEL%
誰かがその理由を知っているかどうか、そしてそれを修正する方法があるかどうかを確認したかっただけです。%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
関連記事: