回答:
START
コマンドを使用して各プログラムを実行すると、必要なものが得られます。
START "title" [/D path] [options] "command" [parameters]
すべてのSTART
呼び出しは、/WAIT
スイッチで実行されない限り、パラメーターで指定されたコマンドを実行し、すぐに戻ります。
これはコマンドラインアプリに適用されます。コマンドラインのないアプリはとにかくすぐに戻るので、すべてを非同期で実行したい場合は、を使用してくださいSTART
。
上記の回答のいくつかを組み合わせて、を試すことができますstart /b cmd /c foo.exe
。
簡単な例として、java / groovy / grails / gradleのバージョンを印刷したい場合は、バッチファイルで次のように実行できます。
@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version
プロセスエクスプローラー(Sysinternals)のようなものがある場合は、いくつかの子cmd.exeプロセス(それぞれ上記のコマンドに従って)がjavaプロセスで表示されます。出力は、終了する順序に関係なく画面に出力されます。
start /b : Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application
cmd /c : Carries out the command specified by string and then terminates
echo off
では、最初に、スクリプトを実行すると、すべてのコマンドがコンソールにエコーされないようにすることがあります。@
似ているが、ちょうどその単一のコマンドです。したがって、時々表示され@echo off
ます。
startコマンドを使用して、新しいウィンドウを起動せずにバックグラウンドプロセスを生成できます。
start /b foo.exe
新しいプロセスはCTRL-Cで中断できません。CTRL-BREAKでのみ(またはウィンドウを閉じるか、タスクマネージャ経由で)強制終了できます。
BREAK
最近キーボードはどこにありますか?
次の行を含むバッチファイルを作成します。
start foo.exe
start bar.exe
start baz.exe
startコマンドは、すべての3つのコマンドは非同期で実行しますので、新しいウィンドウでコマンドを実行します。
STARTコマンドを使用します。
start [programPath]
プログラムへのパスにスペースが含まれている場合は、引用符を追加してください。この場合、開始コンソールウィンドウのタイトルも指定する必要があります。
start "[title]" "[program path]"
引数を提供する必要がある場合は、最後に(コマンドの引用符の外で)引数を追加します。
start "[title]" "[program path]" [list of command args]
/ bオプションを使用して、新しいコンソールウィンドウを開かないようにします(ただし、その場合、CTRL-Cを使用してアプリケーションを中断することはできません。
3つ目の(そして場合によってははるかに簡単な)オプションがあります。単一のプログラムの複数のインスタンスを起動したい場合、XargsやGNU ParallelなどのUnixスタイルのコマンドプロセッサを使用すると、かなり簡単なプロセスになります。
これをかなり簡単にするPPX2と呼ばれるwin32 Xargsクローンがあります。
たとえば、ビデオファイルのディレクトリをトランスコードする場合は、次のコマンドを実行できます。
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
これを分けて、dir /b *.mpg
現在のディレクトリにある.mpgファイルのリストを取得すると、|
オペレーターはこのリストをppx2にパイプし、並列に実行される一連のコマンドを作成します。-P 4
オペレーターがここで指定したとおり、一度に4つ。-L 1
オペレータは一度にffmpegのに列挙たちのディレクトリの1行を送信するためにppx2に指示します。
その後、コマンドライン(ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
)を記述するだけ{}
で、ディレクトリリストの各行が自動的に置き換えられます。
すべてのケースに適用できるわけではありませんが、上記の回避策を使用するよりもはるかに簡単です。もちろん、ファイルのリストを扱っていない場合は、テキストファイルやその他のプログラムの内容をpxx2の入力にパイプすることもできます。
powershellを使用してbatスクリプトを開始しただけで、結局何も動作しませんでした..場合によってはcmd / cも起動しない場合がある理由がわからない.. cmd / cメモ帳を開始して終了する
start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
help
注意深く読んでいるべきでした。:)