web-dev-qa-db-ja.com

CALLコマンドと/ WAITオプション付きのSTART

WAITオプションを指定したSTARTコマンド

START /wait notepad.exe 
START /wait  notepad.exe 

... CALLコマンドを使用するのと何が違うの?

CALL notepad.exe 
CALL notepad.exe 

一方が実行されているものに依存しているのとは異なる動作をする可能性がある状況はありますか?

127
ChadD

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>
152
jeb

私は彼らが一般的に同じように動作するはずだと思いますが、いくつかの違いがあります。 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.
15
mckeejm

たとえばstart /waitを呼び出すときは、callregsvr32.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からエラーレベルを返します

9
aedjp

Call

親バッチプログラムを停止せずに別のバッチプログラムを別のから呼び出します。callコマンドは、呼び出しのターゲットとしてラベルを受け入れます。スクリプトやバッチファイルの外部で使用した場合、呼び出しはコマンドラインでは効果がありません。 https://technet.Microsoft.com/ja-jp/library/bb490873.aspx

開始

別のコマンドプロンプトウィンドウを起動して、指定されたプログラムまたはコマンドを実行します。パラメータなしで使用すると、startは2番目のコマンドプロンプトウィンドウを開きます。 https://technet.Microsoft.com/ja-jp/library/bb491005.aspx

5
Developer

これは私がバッチファイルを並行して実行している間に見つけたものです(異なる入力パラメータで同時に同じbatファイルの複数のインスタンス):

LongRunningTask.exeという長いタスクを実行するexeファイルがあるとしましょう。

Batファイルから直接exeを呼び出すと、LongRunningTaskの最初の呼び出しのみが成功し、残りのファイルは既にプロセスによって使用されているというOSエラーが発生します。

このコマンドを使用すると

start/B/WAIT "" "LongRunningTask.exe" "パラメータ"

あなたはまだバットが残りのコマンドを実行し続ける前にタスクが終了するのを待っている間、あなたはバットとexeファイルの複数のインスタンスを実行することができるでしょう。/Bオプションは、別のウィンドウを作成しないようにするためのものです。コマンドを機能させるには、空の引用符が必要です。以下の参照を参照してください。

起動時に/ WAITを使用しない場合、LongRunningTaskはバッチファイル内の残りのコマンドと同時に実行されるため、これらのコマンドのいずれかでLongRunningTaskの出力が必要な場合は問題が発生する可能性があります。

再開します。

これは並行して実行することはできません。

  • longRunningTask.exeを呼び出します。

これは並行して実行され、コマンドの出力とbatファイルの残りの部分との間にデータの依存関係がない限りは問題ありません。

  • start/B "" "LongRunningTask.exe" "パラメータ"

これは並行して実行され、タスクが終了するのを待つので、出力を使用することができます。

  • start/B/WAIT "" "LongRunningTask.exe" "パラメータ"

Startコマンドのリファレンス: プログラムの起動後にコンソールを開いたままにせずにバッチファイルからプログラムを実行するにはどうすればよいですか?

5
Cherno