WAITオプションを指定したSTARTコマンド
START /wait notepad.exe
START /wait notepad.exe
... CALLコマンドを使用するのと何が違うの?
CALL notepad.exe
CALL notepad.exe
一方が実行されているものに依存しているのとは異なる動作をする可能性がある状況はありますか?
Exeファイルの場合、違いはほとんど重要ではないと思います。
しかしexeファイルを起動するにはCALLは必要ありません。
別のバッチを始めるとき、それは大きな違いです、
as CALL
は同じウィンドウ内で開始し、呼び出されたバッチは同じ変数コンテキストにアクセスできます。
そのため、呼び出し元に影響を与える変数を変更することもできます。
START
は、呼び出されたバッチ用に新しいcmd.exeを作成し、/ bなしで新しいウィンドウを開きます。
それは新しい文脈なので、変数は共有できません。
補遺:CALL
を使用すると、パラメータを変更することができます(バッチファイルとexeファイルの場合)。ただし、キャレットまたはパーセント記号が含まれている場合に限られます。
call myProg param1 param^^2 "param^3" %%path%%
に展開されます(バッチファイル内から)
myProg param1 param2 param^^3 <content of path>
私は彼らが一般的に同じように動作するはずだと思いますが、いくつかの違いがあります。 START
は通常、アプリケーションを起動したり、特定のファイルタイプのデフォルトアプリケーションを起動したりするために使用されます。こうすれば、あなたがSTART http://mywebsite.com
をしてもSTART iexplore.exe http://mywebsite.com
はしません。
START myworddoc.docx
はMicrosoft Wordを起動し、myworddoc.docxを開くでしょう。CALL myworddoc.docx
は同じことをします...しかしSTART
はウィンドウの状態とその性質のものにもっと多くのオプションを提供します。また、プロセスの優先順位と類似性を設定することもできます。
要するに、startによって提供される追加のオプションを考えると、それはあなたの選択の道具であるべきです。
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
"title" Title to display in window title bar.
path Starting directory.
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.
I The new environment will be the original environment passed
to the cmd.exe and not the current environment.
MIN Start window minimized.
MAX Start window maximized.
SEPARATE Start 16-bit Windows program in separate memory space.
SHARED Start 16-bit Windows program in shared memory space.
LOW Start application in the IDLE priority class.
NORMAL Start application in the NORMAL priority class.
HIGH Start application in the HIGH priority class.
REALTIME Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE Specifies the preferred Non-Uniform Memory Architecture (NUMA)
node as a decimal integer.
AFFINITY Specifies the processor affinity mask as a hexadecimal number.
The process is restricted to running on these processors.
The affinity mask is interpreted differently when /AFFINITY and
/NODE are combined. Specify the affinity mask as if the NUMA
node's processor mask is right shifted to begin at bit zero.
The process is restricted to running on those processors in
common between the specified affinity mask and the NUMA node.
If no processors are in common, the process is restricted to
running on the specified NUMA node.
WAIT Start application and wait for it to terminate.
たとえばstart /wait
を呼び出すときは、call
とregsvr32.exe /s
の間には便利な違いがあります。これは、 Gary in _(アプリケーションの終了コード)への回答でも参照)で参照されています。 windows-command-line
call regsvr32.exe /s broken.dll
echo %errorlevel%
常に0を返しますが
start /wait regsvr32.exe /s broken.dll
echo %errorlevel%
regsvr32.exeからエラーレベルを返します
Call
親バッチプログラムを停止せずに別のバッチプログラムを別のから呼び出します。callコマンドは、呼び出しのターゲットとしてラベルを受け入れます。スクリプトやバッチファイルの外部で使用した場合、呼び出しはコマンドラインでは効果がありません。 https://technet.Microsoft.com/ja-jp/library/bb490873.aspx
開始
別のコマンドプロンプトウィンドウを起動して、指定されたプログラムまたはコマンドを実行します。パラメータなしで使用すると、startは2番目のコマンドプロンプトウィンドウを開きます。 https://technet.Microsoft.com/ja-jp/library/bb491005.aspx
これは私がバッチファイルを並行して実行している間に見つけたものです(異なる入力パラメータで同時に同じbatファイルの複数のインスタンス):
LongRunningTask.exeという長いタスクを実行するexeファイルがあるとしましょう。
Batファイルから直接exeを呼び出すと、LongRunningTaskの最初の呼び出しのみが成功し、残りのファイルは既にプロセスによって使用されているというOSエラーが発生します。
このコマンドを使用すると
start/B/WAIT "" "LongRunningTask.exe" "パラメータ"
あなたはまだバットが残りのコマンドを実行し続ける前にタスクが終了するのを待っている間、あなたはバットとexeファイルの複数のインスタンスを実行することができるでしょう。/Bオプションは、別のウィンドウを作成しないようにするためのものです。コマンドを機能させるには、空の引用符が必要です。以下の参照を参照してください。
起動時に/ WAITを使用しない場合、LongRunningTaskはバッチファイル内の残りのコマンドと同時に実行されるため、これらのコマンドのいずれかでLongRunningTaskの出力が必要な場合は問題が発生する可能性があります。
再開します。
これは並行して実行することはできません。
これは並行して実行され、コマンドの出力とbatファイルの残りの部分との間にデータの依存関係がない限りは問題ありません。
これは並行して実行され、タスクが終了するのを待つので、出力を使用することができます。
Startコマンドのリファレンス: プログラムの起動後にコンソールを開いたままにせずにバッチファイルからプログラムを実行するにはどうすればよいですか?