バッチファイルの単一のコマンドラインで複数のコマンドがどのように機能するかを理解しようとしています。
dir & md folder1 & rename folder1 mainfolder
同様のコマンドを使用する他のケースですが、&
は&&
に置き換えられます。
dir && md folder1 && rename folder1 mainfolder
1。この2つのケースの違いは何ですか?
私が聞きたい他のこと:
ワンライナーbatch.bat
:
dir & md folder1 & rename folder1 mainfolder
マルチライナーbatch.bat
:
dir
md folder1
rename folder1 mainfolder
2。このワンライナーとマルチライナーは、バッチファイルプロシージャに関して同じですか?
そして、もう1つ知っておきたいことがあります。
3。main.batから他のバッチファイルを呼び出した場合、それらは独立して同時に実行されますか?メインバッチファイルは他のバッチファイルの手順の終了を待機しませんか?方法それをしますか?
2つのコマンドの間に&
を指定すると、最初のコマンドの結果に関係なく、両方のコマンドが実行されます。 &
の右側のコマンドは、&
の左側のコマンドが前のコマンドの成功またはエラーに関係なく終了した後に実行されます。つまり、前のコマンドの終了/戻り値に関係なく実行されます。
&&
を指定すると、2番目のコマンドが条件付きで実行されます。 2番目のコマンドは、最初のコマンドが成功した場合にのみ実行されます。つまり、戻りコード0で終了しました。
別の説明については、「 条件付き実行 」を参照してください。
dir & md folder1 & rename folder1 mainfolder
したがって等しい
dir
md folder1
rename folder1 mainfolder
複数行の置換
dir && md folder1 && rename folder1 mainfolder
だろう
dir
if not errorlevel 1 (
md folder1
if not errorlevel 1 (
rename folder1 mainfolder
)
)
if not errorlevel 1
は、以前に実行したコマンドを意味しますnot終了コードで終了しますより大きい。コマンドdir
およびmd
は負の値で終了することはなく、0以上(ほぼすべてのコマンドとコンソールアプリケーションと同様)および値が成功の終了コードであるため、これは正しい方法です。 dir
およびmd
が正常に実行されたかどうかをテストします。 Microsoftサポート記事 バッチファイルの特定のエラーレベルのテスト を参照してください。
エラーレベルに関するその他の役立つスタックオーバーフロートピック:
無条件演算子&
と&&
や||
などの条件演算子を混在させる場合は、実行順序が必ずしもコマンドラインでのコマンドの順序とは限らないため、注意が必要です。
例:
dir "C:\Users\%UserName%" /AD 2>nul || dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%"
このコマンドラインは次のように実行されます。
dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
[〜#〜] echo [〜#〜]コマンドは、最初の[~~~~ dir [〜#〜]の実行結果に関係なく常に実行されます[〜#〜] dir [〜#〜]は、Windowsのように最初に失敗した場合にのみ実行されます[〜#〜] dir [〜#〜]失敗XPまたはユーザーのプロファイルフォルダーがドライブCにないか、フォルダーUsers
にまったくない。
実行時に(
および)
を使用する必要があります[〜#〜] echo [〜#〜]最初の場合のみ[〜#〜] dir [ 〜#〜]秒後に失敗[〜#〜] dir [〜#〜]秒の結果に依存しない[〜#〜] dir [〜#〜] =。
dir "C:\Users\%UserName%" /AD 2>nul || ( dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%" )
このコマンドラインは次のように実行されます。
dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 (
dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
)
3番目の質問の答えについては、私の回答を参照してください 現在のバッチファイルの親フォルダーにあるバッチファイルを呼び出す方法? ここで、コマンドcall
またはstart
またはバッチファイル内からこれらの2つのコマンドはありません。