コマンド
type nul > C:\does\not\exist\file.txt
存在しないパスで呼び出されたものは、リダイレクトの失敗で終了し、type
まったく呼び出されません。したがって、 を設定する機会はありませんERRORLEVEL
。シェルによって実行されるリダイレクトは、設定されませんERRORLEVEL
。
ERRORLEVEL
1 つの解決策は、ゼロ以外の値で事前に初期化することです。type
失敗しても変更されず、成功すると (によって) ゼロにリセットされます。
@echo off
::pre-initialise ERRORLEVEL with a value of 1:
call :SETERROR 1
type NUL > NOSUCHDIR\test.txt
IF ERRORLEVEL 1 goto ERROR
echo All is well.
goto END
:ERROR
echo Error detected.
:END
goto :eof
:SETERROR
exit /b %1
短縮形
type NUL > NOSUCHDIR\test.txt && goto OK || goto ERROR
エラーレベルと同じではない終了コードを分析するため、機能します。
終了コードは、リダイレクト演算子 ( を無視する成功/失敗) を使用して直接検出できます。これは、正しく設定されているかどうかに関係なく、 をERRORLEVEL
信頼するよりも信頼性が高くなることがよくあります。ERRORLEVEL
Herbert Kleebauerが Usenetグループでこれを説明してくれました。alt.msdos.batch
更新:匿名ユーザーが、コマンド
に基づく代替ソリューションを提案しました:COPY
COPY NUL: C:\does\not\exist\file.txt
このコマンドはERRORLEVEL
、スクリプト内の次のコマンドによって分析される可能性のある set を実行します。とても便利なので、提案された編集に感謝します。