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


149

WAITオプションを指定したSTARTコマンドはどうですか

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

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

CALL notepad.exe 
CALL notepad.exe 

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


回答:


183

以下のための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>

25
START / WAITを使用してfile.batを実行する場合、START / WAIT "file.bat"だけでなく、START / WAIT cmd / c "file.bat"を指定する必要があります。そうしないと、file.bat用に作成されたcmdウィンドウが開いたままになります
FrinkTheBrave

5
CALLとSTARTの比較は、 ss64.com / nt / start.html(「Start / Wait」セクションと「START vs CALL」セクションで本日更新)
Alfredo Capobianchi 2017

私のお気に入りはstart /wait /b cmd /c <batchfile.bat>、バッチファイルが同じコマンドウィンドウで次々と実行されるためです
linux64kb

linux64kb @、しかし、バッチファイルのために、それはあなたが唯一の必要、必要はありませんcall batchfile.bat
ジェブ

@jeb True。各バッチファイルが異なるコマンドシェル環境で実行され、呼び出しシェルから変数を継承し、初期値への変更がバッチの終了後に失われるため、私はこれが好ましい->連続して実行するたびにガベージが残っていない。もう1つのメリットは、スクリプトで変数をリセットする必要がないことです。
linux64kb

17

ほぼ同じように機能するはずですが、いくつか違いがあります。 START通常、アプリケーションを起動するため、または特定のファイルタイプのデフォルトアプリケーションを起動するために使用されます。そうSTART http://mywebsite.comしないと、そうしませんSTART iexplore.exe http://mywebsite.com

START myworddoc.docxMicrosoft 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.


8

これは、バッチファイルを並行して実行しているときに見つかりました(異なる入力パラメーターを使用して、同じbatファイルの複数のインスタンスを同時に):

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

batファイルから直接exeを呼び出すと、LongRunningTaskへの最初の呼び出しのみが成功し、残りはOSエラー「ファイルはすでにプロセスで使用されています」を受け取ります。

このコマンドを使用する場合:

start / B / WAIT "" "LongRunningTask.exe" "parameters"

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

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

再開:

これは並行して実行できません:

  • LongRunningTask.exeを呼び出す

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

  • start / B "" "LongRunningTask.exe" "parameters"

これは並行して実行され、タスクが完了するまで待機するため、出力を使用できます。

  • start / B / WAIT "" "LongRunningTask.exe" "parameters"

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


6

コール

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

開始

開始別々のコマンドプロンプトウィンドウ指定したプログラムまたはコマンドを実行するために。パラメータなしで使用すると、startは2番目のコマンドプロンプトウィンドウを開きます。 https://technet.microsoft.com/en-us/library/bb491005.aspx


-1

これは古いスレッドですが、私はこの状況に遭遇し、適切な方法を発見しました。setup.exeを実行しようとしましたが、setup.exeの終了を待たずにスクリプトの次の行にフォーカスが戻りました。私は運が悪ければ上記の解決策を試しました。

結局、コマンドをより多くパイプすることでうまくいった。

setup.exe {引数} | もっと

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.