WAITオプションを指定したSTARTコマンドはどうですか
START /wait notepad.exe
START /wait notepad.exe
... CALLコマンドを使用する場合と何が違うのですか?
CALL notepad.exe
CALL notepad.exe
実行されているものに依存する他の動作とは異なる動作をする可能性がある状況はありますか?
WAITオプションを指定したSTARTコマンドはどうですか
START /wait notepad.exe
START /wait notepad.exe
... CALLコマンドを使用する場合と何が違うのですか?
CALL notepad.exe
CALL notepad.exe
実行されているものに依存する他の動作とは異なる動作をする可能性がある状況はありますか?
回答:
以下のためのexeファイルは、私は違いはほとんど重要ではないと仮定します。
しかし、exeを起動するために、必要はありませんCALL
。
別のバッチを起動するときには、大きな違いだ
とCALL
同じウィンドウでそれを起動し、呼ばれるバッチが同じ変数コンテキストへのアクセスを持っています。
したがって、呼び出し元に影響を与える変数を変更することもできます。
START
呼び出されたバッチ用の新しいcmd.exeを作成し、/ bなしで新しいウィンドウを開きます。
これは新しいコンテキストであるため、変数を共有することはできません。
使用start /wait <prog>
-環境変数の変更は<prog>
終了時に失われます
-呼び出し元<prog>
は終了するまで待機します
使用call <prog>
-のためのexeそれはちょうど開始に等しいだから、それは、ommitedすることができます<prog>
-のためのexe-PROG、発信者のバッチを待つか、起動するexeファイルの非同期を、しかし行動はに依存してexeファイルそのもの。
- バッチファイルの場合、呼び出し元のバッチは継続し、呼び出し先が<batch-file>
終了すると、呼び出しなしでコントロールは呼び出し元のバッチに戻りません。
を使用CALL
すると、パラメータ(バッチファイルとexeファイルの場合)を変更できますが、キャレットまたはパーセント記号が含まれている場合のみです。
call myProg param1 param^^2 "param^3" %%path%%
展開されます(バッチファイル内から)
myProg param1 param2 param^^3 <content of path>
start /wait /b cmd /c <batchfile.bat>
、バッチファイルが同じコマンドウィンドウで次々と実行されるためです
call batchfile.bat
ほぼ同じように機能するはずですが、いくつか違いがあります。
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.
そこの間に有益な違いがあるcall
とstart /wait
呼び出すときにregsvr32.exe /s
も、例えばによって参照ゲイリーに彼の答えににどのよう-DO-I-GET-アプリケーションの終了コード-から--Windowsのコマンドライン
call regsvr32.exe /s broken.dll
echo %errorlevel%
常に0を返しますが
start /wait regsvr32.exe /s broken.dll
echo %errorlevel%
regsvr32.exeからエラーレベルを返します
これは、バッチファイルを並行して実行しているときに見つかりました(異なる入力パラメーターを使用して、同じbatファイルの複数のインスタンスを同時に):
LongRunningTask.exeという長いタスクを実行するexeファイルがあるとしましょう
batファイルから直接exeを呼び出すと、LongRunningTaskへの最初の呼び出しのみが成功し、残りはOSエラー「ファイルはすでにプロセスで使用されています」を受け取ります。
このコマンドを使用する場合:
start / B / WAIT "" "LongRunningTask.exe" "parameters"
バットが残りのコマンドの実行を続ける前に、タスクが完了するのを待っている間、バットとexeの複数のインスタンスを実行することができます。/ Bオプションは、別のウィンドウを作成しないようにするためのものです。コマンドを機能させるには、空の引用符が必要です。以下の参照を参照してください。
最初に/ WAITを使用しない場合、LongRunningTaskはバッチファイル内の残りのコマンドと同時に実行されるため、これらのコマンドのいずれかがLongRunningTaskの出力を必要とする場合、問題が発生する可能性があることに注意してください
再開:
これは並行して実行できません:
これは並列に実行され、コマンドの出力と残りのbatファイルの間にデータの依存関係がない限り問題ありません。
これは並行して実行され、タスクが完了するまで待機するため、出力を使用できます。
startコマンドのリファレンス:プログラムの起動後にコンソールを開いたままにせずに、バッチファイルからプログラムを実行するにはどうすればよいですか?
コール
親バッチプログラムを停止することなく、別のバッチプログラムを呼び出します。callコマンドは、ラベルを呼び出しのターゲットとして受け入れます。スクリプトまたはバッチファイルの外で使用した場合、コマンドラインでの呼び出しは効果がありません。 https://technet.microsoft.com/en-us/library/bb490873.aspx
開始
開始別々のコマンドプロンプトウィンドウ指定したプログラムまたはコマンドを実行するために。パラメータなしで使用すると、startは2番目のコマンドプロンプトウィンドウを開きます。 https://technet.microsoft.com/en-us/library/bb491005.aspx
これは古いスレッドですが、私はこの状況に遭遇し、適切な方法を発見しました。setup.exeを実行しようとしましたが、setup.exeの終了を待たずにスクリプトの次の行にフォーカスが戻りました。私は運が悪ければ上記の解決策を試しました。
結局、コマンドをより多くパイプすることでうまくいった。
setup.exe {引数} | もっと