バッチファイル内のコマンド実行シーケンス

バッチファイル内のコマンド実行シーケンス

前のコマンドが正常に実行された後にのみコマンドを実行するバッチ ファイルを作成するにはどうすればよいでしょうか?

答え1

成功の意味によって異なります。foo.exe何も返されなかったかどうかを確認したい場合は終了コード0以外の場合は以下を使用します:

@echo off
start /wait foo.exe
if errorlevel 0 (
  start /wait bar.exe
)

終了コードが返されたbar.exe後に実行します。テストするアプリケーションがデスクトップ用ではなくコンソール用のものである場合は省略できます。foo.exe0start /wait

詳細情報:Windows コマンド ラインからアプリケーションの終了コードを取得するにはどうすればよいですか?、回答者サミュエル・レンカートそしてギャリー

答え2

Hex によって投稿され、Michael のコメントによって改善されたエラーレベルのソリューションに加えて。

これは、あなたがやりたいことをさらに速く実行できます。

最初のコマンド && 2番目のコマンド

2 番目のコマンドは、最初のコマンドが成功した場合にのみ実行されます。つまり、最初のコマンドがエラーを返さなかった場合です。

以下の例では、dir asfsdsはその出力を返しますが、エラーも返します。

dir asdfsss & blah を実行すると、最初のコマンド (dir sdsdf) がエラーを返したかどうかに関係なく、blah が実行されます。

しかし、間に && を入れて実行すると、最初のコマンドがエラーになると、2 番目のコマンドは実行されません。これはブール代数の考え方に基づいています。A が真で B も真であれば、A AND B は真です。したがって、A と B が真かどうかを調べるには、A と B をチェックするか、または「怠惰」または効率的に、どちらか一方だけをチェックして、それが偽であれば式全体が偽であることがわかります。そして、それが真であれば、もう一方をチェックする必要があります。したがって、A && B は A をチェックし、B をチェックする必要がある場合のみ B をチェックします。したがって、B が真の場合にのみ B をチェックします。ただし、このブール代数の概念はコマンドに適用されるため、最初のコマンドが実行され、最初のコマンドがエラーを返す場合もあれば、返さない場合もあります。最初のコマンドがエラーを返した場合は、2 番目のコマンドの実行とチェックは試行されません。最初のコマンドがエラーを返さない場合は、2 番目のコマンドを試します。間違いなく、式自体は、両方が true の場合は true (エラーなし) を返し、そうでない場合は false (エラー) を返します。

C:\Users\user>dir asdfsdf
ドライブ C のボリュームにはラベルがありません。ボリュームのシリアル番号は B411-D580 です

C:\Users\user のディレクトリ

ファイルが見つかりません <---------------- 上記の dir asdfdsds の出力を参照してください

C:\Users\user>dir asdfsdf & echo a
ドライブ C のボリュームにラベルがありません。ボリュームのシリアル番号は B411-D580 です

C:\Users\user のディレクトリ

ファイルが見つかりません a <--- 'echo a' が実行されたことを確認します

C:\Users\user>dir asdfsdf && echo a
ドライブ C のボリュームにはラベルがありません。ボリュームのシリアル番号は B411-D580 です

C:\Users\user のディレクトリ

ファイルが見つかりません

C:\Users\ユーザー>

dir filethatexists && echo a を実行した場合、最初のコマンドが正常に実行され、次に echo a が実行されます。同様に echo a && echo b

関連情報