シェルスクリプトには、次のコードがあります。
if echo Mr.32 ; then
echo Success
else
echo Failed
exit
fi
Windowsバッチファイルの同等の構文は何ですか?
シェルスクリプトには、次のコードがあります。
if echo Mr.32 ; then
echo Success
else
echo Failed
exit
fi
Windowsバッチファイルの同等の構文は何ですか?
返されたERRORLEVELが0に等しくなく、ECHOが失敗する場合を想像するのに苦労しています。出力がファイルにリダイレクトされ、ターゲットドライブがいっぱいの場合、失敗する可能性があると思います。
CptHammerは、GOTOを不必要に使用していますが、ERRORLEVELを使用した優れたソリューションを投稿しています。これは、GOTOなしで次を使用して実行できます。
ECHO Mr.32
if errorlevel 1 (
echo Failed
exit /b
) else (
echo Success
)
コマンドのSUCCESSまたはFAILUREに対してアクションを実行するためのより簡単な方法があります。
command && success action || failure action
あなたの場合
ECHO Mr.32&& (
echo Success
) || (
echo Failed
exit /b
)
私はこのような何かがトリックをするかもしれないと思います:
REM run the command
ECHO Mr.32
IF ERRORLEVEL 1 GOTO failLabel
:successLabel
REM put code to execute in case of success here.
ECHO Success
GOTO endLabel
:failLabel
REM put code here that should be executed in case of failure.
ECHO Failed
:endLabel
これは、テストするコマンド(ここではecho MR.32)が成功すると0を返し、失敗するとそれより高いコマンドを返すことを前提としています(注意:ほとんどのWindows OSのEchoは何も返さないため、このスクリプトでテストされる実際の値はおそらくスクリプトの直前に実行された最後のコマンドからの戻りコード。somefile.txtが存在する場合は0を返し、存在しない場合は1を返すコマンド "DIR someFile.txt"を使用してテストする方がよいでしょう。)
dbenhamが指摘したように、この構造は多くのGOTOを使用していることは事実です。これは、このGOTO構造が、すべてのWindowsバージョンで正常に理解される唯一の構造であるためです。よりコンパクトなバージョンが時間とともに登場しましたが、それらは最近のWindowsバージョンでのみ機能します。