プログラムをバッチファイルで実行しています。バッチスクリプトが一定時間(たとえば10秒)以上実行された場合は中断したいと思います。無限ループになる可能性があるからです。
cls
::set timeout here
program.exe
::after timeout continue from here
Windowsバッチファイルでこれを行うための提案はありますか?さらに、バッチスクリプトで無限ループの行を定義することは可能ですか?
プログラムをバッチファイルで実行しています。バッチスクリプトが一定時間(たとえば10秒)以上実行された場合は中断したいと思います。無限ループになる可能性があるからです。
cls
::set timeout here
program.exe
::after timeout continue from here
Windowsバッチファイルでこれを行うための提案はありますか?さらに、バッチスクリプトで無限ループの行を定義することは可能ですか?
バッチファイルからプログラムを実行する場合は、プログラムを実行して終了するのを待ってからバッチファイルで次のコマンドを実行するか、プログラムを起動してすぐにバッチファイルで実行を続行します。プログラムの実行時間を測定する方法はありません。ただし、特定の手法を使用して、プログラムが実行されているかどうかを確認し、プログラムを終了することができます。遅延を挿入することもできます。だからあなたはあなたが求めていることを(多かれ少なかれ)行うことができます:
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
、が共通のプログラム名である場合tasklist
、taskkill
(開始したインスタンスだけでなく)同じプログラム名ですべてのプロセスを終了するためです。
どのようにそのことについて?
start calc.exe
ping -n 10 localhost >nul
taskkill /F /IM calc.exe