0

プログラムをバッチファイルで実行しています。バッチスクリプトが一定時間(たとえば10秒)以上実行された場合は中断したいと思います。無限ループになる可能性があるからです。

cls
::set timeout here
program.exe
::after timeout continue from here

Windowsバッチファイルでこれを行うための提案はありますか?さらに、バッチスクリプトで無限ループの行を定義することは可能ですか?

4

2 に答える 2

3

バッチファイルからプログラムを実行する場合は、プログラムを実行して終了するのを待ってからバッチファイルで次のコマンドを実行するか、プログラムを起動してすぐにバッチファイルで実行を続行します。プログラムの実行時間を測定する方法はありません。ただし、特定の手法を使用して、プログラムが実行されているかどうかを確認し、プログラムを終了することができます。遅延を挿入することもできます。だからあなたはあなたが求めていることを(多かれ少なかれ)行うことができます:

cls
start program.exe
ping -n 10 -w 1000 127.0.0.1 > nul 2>&1
tasklist | find /i "program.exe"
if %errorlevel%==0 taskkill /im program.exe

これにより、プログラムが開始され、すぐに次のコード行である。が実行されますping。これpingにより、10秒の遅延が発生します。コマンドはtasklistリストをにパイプしfind、プログラムを探します。リストにある場合は、まだ実行中であり、errorlevelに設定されて0います。これは、次の行でプログラムが終了することを意味します。

ただし、これは絶対確実ではありません。これはprogram.exe、が共通のプログラム名である場合tasklisttaskkill(開始したインスタンスだけでなく)同じプログラム名ですべてのプロセスを終了するためです。

于 2013-03-25T15:48:17.203 に答える
1

どのようにそのことについて?

start calc.exe
ping -n 10 localhost >nul
taskkill /F /IM calc.exe
于 2013-03-25T15:47:06.070 に答える