167

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

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

...CALL コマンドを使用するのと何か違いはありますか?

CALL notepad.exe 
CALL notepad.exe 

実行されている内容に応じて、一方が他方と異なる動作をする状況はありますか?

4

6 に答える 6

205

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>
于 2012-11-06T19:59:54.257 に答える
18

基本的には同じように機能すると思いますが、いくつかの違いがあります。 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.
于 2012-11-06T20:06:05.840 に答える
12

たとえば、呼び出し時との間callには有用な違いがあります。これは、Garyがhow-do-i-get-the-application-exit-code-from-a-windows-command-lineへの回答で参照しています。start /waitregsvr32.exe /s

call regsvr32.exe /s broken.dll
echo %errorlevel%

常に 0 を返しますが、

start /wait regsvr32.exe /s broken.dll
echo %errorlevel%

regsvr32.exe からエラー レベルを返します。

于 2014-12-18T11:45:42.147 に答える
8

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

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

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

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

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

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

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

再開中 :

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

  • LongRunningTask.exe を呼び出す

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

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

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

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

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

于 2017-05-17T18:17:19.220 に答える
-1

これは古いスレッドですが、この状況に遭遇したばかりで、うまく回避する方法を発見しました。setup.exe を実行しようとしましたが、setup.exe が完了するのを待たずにスクリプトの次の行にフォーカスが戻りました。上記の解決策を試してみましたが、うまくいきませんでした。

最終的に、コマンドを more にパイプすることでうまくいきました。

setup.exe {引数} | もっと

于 2019-06-11T20:39:34.490 に答える