web-dev-qa-db-ja.com

バッチファイルでのコマンドチェーン用の複数行&&コンビネータ演算子

なるほど この演算子はWindows(Linuxの場合もありますか?)で複数のコマンドを1行にチェーン/結合するために使用されます。コマンドは、先行が正常に完了している限り(終了コード0)、次々に実行されます。

ただし、コマンドを1行に1つずつ指定するバッチファイルで使用できるかどうかはわかりません。この場合、どのようにして同じ効果を達成しますか? どのように分割しますかcmd1 && cmd2 && cmd3複数行に?どのように終了しますか

cmd1
cmd2
cmd3

最初のコマンドが失敗するとすぐに?

また、このような質問に対する答えを後で見つけるために、オペレーターの名前を知りたいと思います。

1
Val
cmd1 && cmd2 && cmd3

次のように複数行で書くことができます

cmd1
if not errorlevel 1 cmd2
if not errorlevel 1 cmd3

ここで、各コマンドの実行は前のコマンドの結果に依存します

1
MC ND

GNU/Linuxでは、コマンドを分割できますcmd1 && cmd2 && cmd3次のようなスクリプトファイルの複数の行に(読みやすさなどのために):

cmd1 &&
cmd2 &&
cmd3
4
Carolus

それらの違いは次のとおりです。

cmd1
cmd2
cmd3

各コマンドを個別に起動し、ヒットした場合にバッチジョブを終了できるようにします Ctrlc 終了する前に。

どこで

cmd1 && cmd2 && cmd3

コマンドを次々に起動しますが、スクリプトを見ずに/一度に起動します。

さらなる例として、

最初の例を見てみましょう。cmd1の実行中にスクリプトを編集し、cmd2をcmd3に変更すると、cmd1の終了時にcmd3が読み込まれます。

Linuxでは、ifdown eth0 sshセッションが失われるので、代わりにifdown eth0 && ifup eth0コマンドをチェーンします。

失敗に関して何かをしたい場合は、ifステートメントとスイッチをリターンコードとエラーレベルとともに確認する必要があります。 リンキー

0
William Hilsum

&&はどのように機能しますか?

ただし、コマンドを1行に1つずつ指定するバッチファイルで使用できるかどうかはわかりません。

この回答の残りの部分は、Windowsバッチファイル用です。


cmd1 && cmd2 && cmd3を複数の行に分割するにはどうすればよいですか?

コマンドは、if%errorlevel%を使用して分割できます。

Setlocal EnableDelayedExpansion
cmd1
if !ERRORLEVEL! equ 0 (
  cmd2
  if !ERRORLEVEL! equ 0 (
    cmd3
    )
  )

演算子の名前も知りたい&&

&&演算子は、2つの条件演算子のいずれかです。もう1つは||です。

commandA && commandBcommandAを実行し、成功した場合はcommandBを実行します

commandA || commandBcommandAを実行します。失敗した場合は、commandBを実行します。

ソース リダイレクト


参考文献

0
DavidPostill