windows - cmd parallel




Windows CMDで1行に2つのコマンドを実行するにはどうすればよいですか? (11)

私はWindows CMDコンソールで2つのコマンドを実行したい。

Linuxでは、私はこれを好きです

touch thisfile ; ls -lstrh

それはWindows上でどのように行われますか?


1行で変数を使用または操作しようとすると、その内容に注意してください! たとえば、次のような変数

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

あなたが%PATH%としてそれを使用すれば、手に取られないトラブルがたくさん発生します。

  1. 閉じ括弧はグループ文を終了します。
  2. 二重引用符では、 %PATH%を使用してかっこの問題を処理することはできません
  3. そして、 %USERPROFILE%ような参照変数にはどのようなものが含まれますか?

2000年以来、このようにすべてのMicrosoft OSで、今でも良い:

dir & echo foo

最初のコマンドが正常に終了した場合にのみ、2番目のコマンドを実行するには:

dir && echo foo

1行に複数のコマンドを実行するための単一のアンパサンド(&)構文は、Windows XP、Windows 2000、およびいくつかの以前のNTバージョンに戻ります。 (少なくとも4.0人、ここのコメント者によると。)

これについては、このページをスクロールして見つけることができます。

歴史的なデータは、それが教育的であると感じるかもしれない人々のために続く。

その前に&&構文は、その機能がMicrosoftコマンドインタープリタに追加される前のシェル置換4DOSの機能に過ぎませんでした。

Windows 95,98、MEでは、代わりにパイプ文字を使用します。

dir | echo foo

MS-DOS 5.0以降では、以前のWindowsおよびNTバージョンのコマンドインタープリタを使用して、(文書化されていない)コマンドセパレータは文字20(Ctrl + T)でした。

dir ^T echo foo

&を使って次々にコマンドを実行できます。 例: c:\dir & vim myFile.txt


&はBashと同等です; (実行コマンド)と&&はBashの&& (前のコマンドでエラーが発生していない場合にのみコマンドを実行)です。


単純です: &&記号で区別するだけです。 例:

echo Hello World && echo GoodBye World

さよならワールドは、Hello Worldの後に印刷されます。


あまりにも早く評価されている環境変数の問題を解決するためにcallを使うことができます。

set A=Hello & call echo %A%

だから、コンテキストメニューからRegAsm (レジスタアセンブリ)を実行する特定のタスクを有効にしようとしていRegAsm 。 私が持っていた問題は、それを読むことができるようになる前に、結果が飛び散って消えてしまうことでした。 そこで私はPauseにパイプを試みましたが、これはコマンドが失敗したときには動作しませんでした(ここで言及したように、.batスクリプトで動作しない一時停止コマンドとここではバッチファイルコマンドPAUSEは機能しません )。 だから私はcmd /kを試しましたが、それはより多くのコマンドのためにウィンドウを開いたままにしています(私は結果を読みたいだけです)。 そこで、 pauseを追加してチェーンをexitさせ、以下の結果を得ました:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

これは魔法のように機能します - RegAsmはファイル上で実行され、その結果を表示し、次に "Press any key to continue ..."プロンプトが表示され、キーを押すとコマンドプロンプトウィンドウが閉じます。

PS興味のある他の人には、以下の.regファイルエントリを使用して.dllファイルにdllfileの関連付けを追加し、それにRegAsmコマンドの拡張子を付けることができます(エスケープされた引用符とバックスラッシュに注意してください)。

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

今すぐ右クリックメニューがあり、アセンブリを登録できます。


まあ、あなたは2つのオプションがあります:配管、または単に&

DIR /S & START FILE.TXT

または、

tasklist | find "notepad.exe"

パイプ( | )は、1つのコマンドの出力を別のコマンドに出力するためのものです。 そして、( & )はこれを実行するということだけです。


ドキュメントからの引用:

複数のコマンドと条件付き処理記号の使用

条件付き処理記号を使用して、1つのコマンドラインまたはスクリプトから複数のコマンドを実行できます。 条件付き処理シンボルで複数のコマンドを実行する場合、条件付き処理シンボルの右側にあるコマンドは、条件付き処理シンボルの左側にあるコマンドの結果に基づいて動作します。

たとえば、前のコマンドが失敗した場合にのみ、コマンドを実行することができます。 あるいは、前のコマンドが成功した場合にのみ、コマンドを実行することもできます。

次の表に示す特殊文字を使用して、複数のコマンドを渡すことができます。

  • & [...]
    command1 & command2
    1つのコマンドラインで複数のコマンドを区切るために使用します。 Cmd.exeは最初のコマンドを実行し、次に2番目のコマンドを実行します。

  • && [...]
    command1 && command2
    シンボルの前のコマンドが成功した場合にのみ、&&の後にコマンドを実行するために使用します。 Cmd.exeは最初のコマンドを実行し、最初のコマンドが正常に完了した場合にのみ2番目のコマンドを実行します。

  • || [...]
    command1 || command2
    ||の後にコマンドを実行するために使用します。 ||より前のコマンド 失敗する。 Cmd.exeは最初のコマンドを実行し、最初のコマンドが正常に完了しなかった場合にのみ2番目のコマンドを実行します(0より大きいエラーコードを受け取ります)。

  • ( ) [...]
    (command1 & command2)
    複数のコマンドをグループ化またはネストするために使用します。

  • ; or ,
    command1 parameter1;parameter2
    コマンドパラメータを区切るために使用します。


同じ行でいくつかのコマンドを実行するときにいくつかの処理シンボルを使用することができ、場合によってはリダイレクション処理につながり、他の場合には出力を変更したり、失敗したりすることがあります。 1つの重要なケースは、変数を操作する同じ行コマンドに置くことです。

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

上記の例のように、変数を使用するコマンドが同じ行に配置されている場合は、遅延拡張を使用して変数値を更新する必要があります。 変数が索引付けされている場合は、%%修飾子を指定したCALLコマンドを使用して、同じ行の値を更新します。

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

私は同じウィンドウに2つのpingを持っているようにしようとしています。これは同じ行のシリアルコマンドです。 最初のコマンドが終了したら、2番目のコマンドを実行します。

解決策は、Windows 7のコマンドプロンプトでstart /bと組み合わせることでした。

/bずに通常どおり起動し、別のウィンドウで起動します。

同じ行で起動するコマンドは次のとおりです。

start /b command1 parameters & command2 parameters

いずれにしても、出力を解析する場合は、これを使用することはお勧めしません。 私は出力がコマンドの出力の間にスクランブルされていることに気づいた。





cmd