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


65

Windowsコマンドラインで1行だけで複数のコマンドを実行するにはどうすればよいですか?

たとえば、SVN更新を実行してから、すべてのファイルを別の場所にコピーしたい場合...

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

それは明らかに機能しません。「;」のような文字または区切り文字はありますか このような何かを実行するには?

回答:


105

はいあります。です&

&& コマンド1が完了すると、コマンド2が失敗しなければ、コマンド2を実行します。

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


7
&および&&Windowsでのみ作品cmd.exe-あるではない DOS。
悲しみ

22
用語としての「DOS」はしばしばcmd を説明するために使用され、opがsvnを使用しているのを見て、彼がまだDOSを使用していることを疑います。
退屈

そこで:urlencode.blogspot.com/2009/06/vista-desktop-june-09.html彼はWindows XPを使用しています。確かにDOSではありません(見栄えがよくありません;))
Phoshi

8
だれかが「DOS」に言及するとき、それは本当に「Windowsコマンドプロンプト」を意味すると仮定するのは安全だと思います。私はここで手足に出て、ほとんどの人がおそらく最近DOSをあまり使わないだろうと言うつもりです。修正してくれてありがとう-それはこの日と年齢では少し不必要です。
マードックリッパー

@MurdochRipperどういう意味ですか?現在、この質問をDOSで表示しています。;)
アンドリュー

4

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


4

startたとえば、次のようなコマンドを実行する場合、コマンドを開始する1行で複数のコマンドを実行する場合:

start "" netsh dump && pause

次に、2つのステップでそれを行う必要があります(この答えの最後に1行の解決策があります)。

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

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

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

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

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


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

start "" "temporary foobar.cmd"

このように二重引用符の空のペアを省略した場合:

start "temporary foobar.cmd"

その後、start新しいコマンドウィンドウを開き、使用する"temporary foobar.cmd"新しいコマンド・ウィンドウとして"Title"、そして何も新しいコマンド・ウィンドウで実行されません。)

あなたがしたい場合start(後にバッチファイルが完了するのを待つためにpause却下された)、前にstart完了し、その後、あなたは追加する必要があります/wへの切り替えをstart指示:

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スイッチで実行する必要があります。削除しないと、一時バッチファイルは実行前に削除される可能性があります。


代わりに、ファイルを削除する前に短いスリープを設定/wできます。たとえば、それを行います。timeout 2
アントニオ

@ kevin-feganなぜ一時的なcmdファイルが必要なのですか?
maxxyme

0

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

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

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


または言うことができます(if exist abc. command₁) & command₂
スコット

@Scottは、これらのサイトでは賛辞が罪であることを知っていますが、start "" cmd /c "(command₁) & (command₂)"合法であり、ウェブ上のどこにも答えられませんが、ほとんどのバッチステートメントをリンクする唯一の方法です。おめでとうございます。
ジョンKENS

1
賛辞/おめでとうございますが、あなたの言っていることがわかりません。user138334は「ケースであなたが最初のコマンドをラップしたい、と述べたifが、まだ2番目のコマンドのように、その後に関係なく実行するために、あなたがラップしなければならないifcmd /c同様」、と私はせずにそれを行う方法で応答しましたcmd /c。では、なぜほとんどのバッチステートメントをリンクする唯一の方法はを使用していると言っているのcmd /cですか?そして、なぜあなたstartはミックスに投入していますか?
スコット

0

はい使用&

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

%command1% && %command2% 最初のコマンドを実行します。それが機能する場合は、2番目のコマンドを実行します

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

こちらをご覧ください


そしてまた&&&、および||実際のコマンドではありません、それはバッチの一部です。コマンドではありません。
KIRBY吸入U

そして%command%見コマンドとしてその文字列を、実行することができ、ここで
KIRBY吸入U

-1

「START」を使用すると、複数のコマンドが動作することが修正されました(Windows 10 Homeを実行しています)。例えば:

START chrome.exe "page.web.com" & timeout 20

回答には「ありがとう」などのコメントを含めないでください。解決策の邪魔になります。あなたはこの回答を編集考慮しなければならないので、それは単に同じくらいが、ノイズのない限り詳細に、質問に答える(すなわち動作しないコマンド)
Ramhound

彼が探しているのは、では&ありませんstart
NetwOrchestration 16

これはどのような問題を解決しますか?なしでコマンドラインを入力するとどうなりますstartか?
スコット

-2

bat.batなどの短い名前でバッチファイルを作成します。

add cmd /c %1 
    cmd /c %2 
rem

などを9行にして保存します

その後、二重引用符で使用します

bat "command one" "command two" "command three" 

cmd /c 各コマンドを実行し、次の行でシャットダウンします。これは&&よりも良いとは言わず、簡単だというだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.