同じスクリプト上bash
でcmd
同じスクリプトで異なるコマンドを実行する方法はいくつかあります。
cmd
:;
他の回答で述べたように、で始まる行は無視されます。文字が改行をエスケープし、次の行がによってコメントとして扱われるため、現在の行がコマンドrem ^
で終了する場合も、次の行は無視^
されrem
ます。
行をbash
無視させるcmd
には、いくつかの方法があります。cmd
コマンドを壊すことなくそれを行ういくつかの方法を列挙しました :
存在しない#
コマンド(非推奨)
スクリプトの実行時に#
使用できるコマンドがない場合は、次のようにcmd
できます。
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
行#
の先頭の文字は、その行をコメントとして扱います。cmd
bash
#
行末の文字は、ブライアントンプセットが回答で指摘したbash
ように、\r
文字をコメント化するために使用されます。これbash
がないと、ファイルの\r\n
行末にが必要な場合にエラーがスローされcmd
ます。
を実行することにより、後続のコマンドを実行しながら、存在しないコマンドのエラーを無視するように# 2>nul
仕向けcmd
て#
います。
で使用#
できるコマンドがあるPATH
場合、またはで使用できるコマンドを制御できない場合は、このソリューションを使用しないでくださいcmd
。
を使用echo
して#
文字を無視するcmd
我々は使用することができecho
、出力を挿入するようにリダイレクトされ、それのとcmd
でコマンドをbash
さん、コメントアウトエリア:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
その#
文字はで特別な意味を持たないため、cmd
へのテキストの一部として扱われますecho
。echo
コマンドの出力をリダイレクトし、その後に他のコマンドを挿入するだけで済みました。
空の#.bat
ファイル
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
このecho >/dev/null # 1>nul 2> #.bat
行は、#.bat
オンの間は空のファイルを作成しcmd
(または、存在する#.bat
場合は既存のを置き換え)、オンの間は何もしませんbash
。
このファイルcmd
は、に他の#
コマンドがある場合でも、後続の行で使用されますPATH
。
-specificコードのdel #.bat
コマンドは、cmd
作成されたファイルを削除します。これは最後のcmd
行で行うだけです。
#.bat
ファイルが現在の作業ディレクトリにある可能性がある場合は、このソリューションを使用しないでください。そのファイルは消去されます。
推奨:ヒアドキュメントを使用してcmd
コマンドを無視するbash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
^
行末に文字を配置することにより、cmd
改行をエスケープ:
し、ヒアドキュメントの区切り文字として使用することで、区切り文字の行の内容はに影響しませんcmd
。この方法でcmd
は、:
行が終了した後にのみその行を実行し、と同じ動作をしbash
ます。
両方のプラットフォームで複数の行を使用し、それらをブロックの最後でのみ実行する場合は、次のようにします。
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
cmd
と正確here-document delimiter
に一致する行がない限り、このソリューションは機能します。here-document delimiter
他のテキストに変更できます。
提示されたすべてのソリューションでは、コマンドは最後の行の後でのみ実行され、両方のプラットフォームで同じことを実行した場合の動作に一貫性があります。
これらのソリューションは\r\n
、改行としてファイルに保存する必要がありますcmd
。そうしないと、機能しません。