17

シェルスクリプトには、次のコードがあります。

if echo Mr.32 ; then
  echo Success
else
  echo Failed
  exit
fi

Windowsバッチファイルの同等の構文は何ですか?

4

2 に答える 2

30

返された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
)
于 2012-08-07T15:48:07.790 に答える
12

私はこのような何かがトリックをするかもしれないと思います:

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バージョンでのみ機能します。

于 2012-08-07T13:37:04.777 に答える