私が持っているなら
バッチファイルからすべてを非同期に、つまり前のプログラムが停止するのを待たずに実行するにはどうすればよいですか?
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
Startコマンドを使用して、新しいウィンドウを起動せずにバックグラウンドプロセスを生成できます。
start /b foo.exe
新しいプロセスは、CTRL-Cで中断できません。 CTRL-BREAKでのみ(またはウィンドウを閉じるか、タスクマネージャーを使用して)強制終了できます。
次の行でバッチファイルを作成します。
start foo.exe
start bar.exe
start baz.exe
start command は、新しいウィンドウでコマンドを実行するため、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
演算子は、ディレクトリ一覧の1行のみを一度にffmpegに送信するようにppx2に指示します。
その後、コマンドライン(ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
)を記述するだけで、{}
がディレクトリリストの各行に自動的に置き換えられます。
これはすべての場合に普遍的に適用できるわけではありませんが、上記のバッチファイルの回避策を使用するよりもはるかに簡単です。もちろん、ファイルのリストを処理していない場合は、テキストファイルまたはその他のプログラムの内容をpxx2の入力にパイプすることもできます。