web-dev-qa-db-ja.com

exeファイルがバッチファイルで完了するのをどのように待ちますか?

Sp1をインストールするために、シャットダウン時にexeを実行するスクリプトを作成しようとしています。私のスクリプトは(実際のbatスクリプトではなく)のようになります。

If installed GOTO END
    Install.exe
END:

私の問題は、実行時にインストーラーが起動し、スクリプトが終了することです。これは、インストーラーのプロセスが異なるためです。コンピューターがシステムをシャットダウンしてシャットダウンしたため、インストールプロセスをシャットダウンします(少なくとも、私はそう思います)それはやっています。)

開始したプロセスが完了するまで待機してからシャットダウンするように指示する方法はありますか?

47
Kravlin

実行してみてください

START /WAIT Install.exe
86
Bart De Vos

1つの短い方法:

Install.exe|more

また

install|rem

使用することもできますが、最終的にはコンソール出力をキャッチできるようになります。そしてこれが機能する理由です-パイプされたコマンドは.exeが終了するまで入力を待ちます

24
npocmaka

バッチファイルから直接exeを呼び出すか、start /waitは機能しますが、注意が必要です。

呼び出すexeが他のプロセスを作成し、別のexeを呼び出す場合、バッチファイルを終了すると、呼び出されたexeが終了した後、他のプロセスが起動したことを認識していないため、バッチファイルは処理を続行します。

あなたの場合、これは本当の問題です。インストーラーは通常、exe自体に埋め込まれている可能性がある圧縮されたコンテナーからファイルを抽出し、抽出されたファイルの1つを起動して終了するためです。一部のインストーラーは、インストール全体が完了するまで終了しないように元のexeに指示するコマンドラインパラメーターを提供します。そのため、調査が必要な場合があります。それ以外には、バッチファイルだけでこれを回避する実際の方法はなく、解決するにはプログラムによる解決策をとります。

14
John Gardeniers

以下は、MATLABを使用した例です。私は、MATLABのパス設定が完了し、FileName.mファイルによってMATLABの出口が確保されている(またはユーザーが内部的に指定した)と想定しています。

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit
5
Rachit Kumar

私は@John Gardeniersに問題があるか、説明しました。私のexeが別のexeを呼び出して終了したため、start/waitが機能しませんでした。 「whileループ」を作成して、実行中かどうかを確認し、完了したら次に進みます。時間はニーズに合わせて調整できます。

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN
1

Start/waitコマンドを使用できます。これにより、アプリケーションが起動し、アプリケーションが終了するのを待ちます。

または、実行にかかる時間がわかっている場合は、 Windows Server 2003 Resource Kit Tools によって提供されるsleepコマンドを確認できます。 Sleep.exeを使用すると、バッチを任意の秒数だけ一時停止して、プログラムが完全にインストールされてから、バッチファイルが他の何かをインストールすることができます。プログラム自体が別のプロセスを起動するため、「start/wait」構文を無視するプログラムがいくつかあり、sleep.exeは非常に便利です。

0