it-swarm-ja.com

Windowsのコマンドラインで1行で複数のコマンドを実行しますか?

Windowsのコマンドラインで1行で複数のコマンドを実行する方法を教えてください

たとえば、SVNアップデートを実行してから、すべてのファイルを別の場所にコピーするとします。

svn update; copy *.* c:\development\copy\

それは明らかにうまくいきません。 ';'のような文字または区切り文字がありますかこのようなことをするため?

65
T. Stone

はいあります。それは &

&&は、コマンド1が完了したときにコマンド2を実行します。

&は関係なく実行されます。

105
Phoshi

たとえば、次のようなコマンドを実行したい場合など、1行で複数のコマンドを実行したい場合、ここでコマンドをstartで開始します。

start "" netsh dump && pause

それから、2ステップでそれをする必要があります(1行ソリューションはこの回答の終わりにあります)。

まず、コマンドを一時バッチファイルに書き込みます(この場合は&または&&を使用できます)。

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

echoコマンドで通常の文字として扱えるようにするには、各"&"s(アンパサンド)を"^"で "エスケープ"する必要があります。あるいは、メモ帳などのテキストエディタで一時バッチファイルを作成することもできます。

次に、startを使用してバッチファイルを起動します。

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


注:空の二重引用符は、startが開くコマンドウィンドウのタイトルバーに表示される"Title"用です。この"Title"引数は、技術的にはstartに対するオプション引数ですが、実際には必須ですstartが実行するコマンドが二重引用符で囲まれている場合、。たとえば、2番目の例では、

start "" "temporary foobar.cmd"

次のように空の二重引用符を省略した場合、

start "temporary foobar.cmd"

startは新しいコマンドウィンドウを開き、"temporary foobar.cmd"を新しいコマンドウィンドウ"Title"として使用し、noneは新しいコマンドで実行されます。窓。)

startが(pauseが却下された後に)バッチファイルの完了を待つようにしたい場合は、startが完了する前に、startコマンドに/wスイッチを追加する必要があります。

start "" /w foobar.cmd

これを1行にまとめて、一時バッチファイル(foobar.cmd)を削除(削除)することもできます。

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

一時バッチファイルを削除しようとしている場合は、start/wスイッチを付けて実行する必要があります。そうしないと、一時バッチファイルが実行される前に削除される可能性があります。

4
Kevin Fegan

少なくともMS-DOS 6.22では私はキーを使用していました Ctrl+T 段落記号の一種を取得します。これはちょうど同じように働いた & Phoshiによって言及された。ただし、doskey.exeが実行されている場合にのみ機能します。

はい&を使用してください。

%command1% & %command2%は両方のコマンドを実行します

%command1% && %command2%は最初のコマンドを実行し、それがうまくいったら2番目のコマンドを実行します

%command1% || %command2%は最初のコマンドを実行し、それが失敗した場合はsecondsコマンドを実行します。

こちら をご覧ください

0
KIRBY INHALES U

最初のコマンドをifでラップしたいが、それでも2番目のコマンドを実行したい場合は、次のようにcmd/cでifをラップする必要があります。

abcが存在する場合はcmd/c。 (rd/q abc)&echoこんにちは

Ifの前にcmd/cを付けないと、コマンド全体がifの一部になります(これは望ましくない場合があります)。

0
user138334