我有一个X.exe
程序需要大约2-6小时才能完成。确切的时间是未知的,但我想实现一个6.5或7小时的门槛。如果这个程序在这段时间内没有返回任何值,它将被杀死。我如何使用批次*.bat
文件实现此目的?超时或关闭过程完成
这是我到目前为止:计时器bat1.bat
和实际bat2.bat
。
bat1.bat:
start cmd /C bat2.bat & timeout /t 25200 & taskkill /im X.exe /f
bat2.bat:
cd blah
bat1.bat
这种方法的问题是,只有后25200秒(或7小时),定时器将被停止,并且它在该限制之前不会被终止。如何告诉计算机,如果程序X.exe
已完成,那么不要再等待了?
任何帮助表示赞赏!
如果将它设置为以计划任务运行,则可以告诉它在8小时后停止任务。不幸的是,您在任务调度程序中唯一的选项是1,2,4,8或12小时。你可以做的是使用'TASKLIST'命令来检查程序是否每300秒运行一次。如果它没有运行,那么bat文件可以退出。如果它仍在运行,请检查目前为止运行了多少秒,如果它是25,200秒,请将其关闭。 – Squashman
@Squashman感谢你的想法和命令。我有一个简单的脚本'tasklist/fi“imagename eq X.exe”',但是如何返回'X.exe'运行的时间量?你能提供一个正式的答案,以便我也可以接受吗?谢谢!!! – kensaii
设置三个变量。 %checktime%%elapsedtime%和%killtime%。使用带TIMEOUT命令的%checktime%变量。然后使用'TASKLIST'命令查看进程是否正在运行。如果正在运行,则将%checktime%添加到%elapsedtime%。然后检查%elapsedtime%是否大于或等于%killtime%。如果kill time条件没有被满足,那么在'TIMEOUT'命令之前使用'GOTO'命令循环回标签。如果杀死时间条件已满足,则使用'TASKKILL'命令停止该进程。 – Squashman