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ファイルの場合、違いはほとんど重要ではないと思います。
しかし、必要のないexeCALL
を起動するには.
別のバッチを開始する場合、同じCALL
ウィンドウで開始し、呼び出されたバッチは同じ変数コンテキストにアクセスできるため、大きな違いがあります。
したがって、呼び出し元に影響を与える変数を変更することもできます。
START
呼び出されたバッチ用に新しい cmd.exe を作成し、/b を指定しないと新しいウィンドウが開きます。
新しいコンテキストであるため、変数を共有することはできません。
使用start /wait <prog>
- 環境変数の変更は<prog>
終了時に失われます - 呼び出し元は終了
するまで待機します<prog>
使用call <prog>
- exeの場合は省略できます。これは開始するだけと同じであるためです<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
通常、アプリケーションを起動するか、特定のファイル タイプのデフォルト アプリケーションを起動するために使用されます。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
には有用な違いがあります。これは、Garyがhow-do-i-get-the-application-exit-code-from-a-windows-command-lineへの回答で参照しています。start /wait
regsvr32.exe /s
call regsvr32.exe /s broken.dll
echo %errorlevel%
常に 0 を返しますが、
start /wait regsvr32.exe /s broken.dll
echo %errorlevel%
regsvr32.exe からエラー レベルを返します。
これは、バッチファイルを並行して実行しているときに見つけたものです(同じバットファイルの複数のインスタンスを同時に異なる入力パラメーターで):
LongRunningTask.exe という長いタスクを実行する exe ファイルがあるとします。
exeをbatファイルから直接呼び出すと、LongRunningTaskへの最初の呼び出しのみが成功し、残りはOSエラー「ファイルはプロセスによって既に使用されています」が発生します
このコマンドを使用する場合:
start /B /WAIT "" "LongRunningTask.exe" "パラメータ"
バットが残りのコマンドの実行を続行する前にタスクが終了するのを待っている間に、バットと exe の複数のインスタンスを実行することができます。/B オプションは、別のウィンドウを作成しないようにするためのものです。コマンドを機能させるには、空の引用符が必要です。以下のリファレンスを参照してください。
最初に /WAIT を使用しない場合、LongRunningTask はバッチ ファイル内の残りのコマンドと同時に実行されるため、これらのコマンドの 1 つが LongRunningTask の出力を必要とする場合に問題が発生する可能性があることに注意してください。
再開中 :
これは並行して実行できません:
これは並行して実行され、コマンドの出力とバット ファイルの残りの部分との間にデータの依存関係がない限り問題ありません。
これは並行して実行され、タスクが完了するのを待つため、出力を使用できます。
start コマンドのリファレンス :プログラムの開始後にコンソールを開いたままにせずに、バッチ ファイルからプログラムを実行するにはどうすればよいですか?
これは古いスレッドですが、この状況に遭遇したばかりで、うまく回避する方法を発見しました。setup.exe を実行しようとしましたが、setup.exe が完了するのを待たずにスクリプトの次の行にフォーカスが戻りました。上記の解決策を試してみましたが、うまくいきませんでした。
最終的に、コマンドを more にパイプすることでうまくいきました。
setup.exe {引数} | もっと