【发布时间】:2017-10-21 00:27:10
【问题描述】:
我有一个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 完成了就不要再等待了?
感谢任何帮助!
【问题讨论】:
-
如果您将 x.exe 设置为作为计划任务运行,您可以告诉它在 8 小时后停止任务。不幸的是,您在任务调度程序中的唯一选择是 1、2、4、8 或 12 小时。您可以做的是使用
TASKLIST命令检查程序是否每 300 秒运行一次。如果它没有运行,那么 bat 文件可以退出。如果它仍在运行,请检查到目前为止已经运行了多少秒,如果是 25,200 秒,则终止它。 -
@Squashman 感谢您的想法和命令。我有一个简单的脚本
tasklist /fi "imagename eq X.exe",但是你如何返回X.exe已经运行的时间量?你能提供一个正式的答案,以便我也可以接受吗?谢谢!!! -
设置三个变量。 %checktime% %elapsedtime% 和 %killtime%。将 %checktime% 变量与
TIMEOUT命令一起使用。然后使用TASKLIST命令查看进程是否正在运行。如果它正在运行,则将 %checktime% 添加到 %elapsedtime%。然后检查 %elapsedtime% 是否大于或等于 %killtime%。如果没有满足终止时间条件,请使用GOTO命令循环回到TIMEOUT命令之前的标签。如果满足终止时间条件,则使用TASKKILL命令停止该进程。 -
@Squashman 非常感谢,我想我根据您的上述评论想通了。祝你有美好的一天!
标签: windows batch-file timeout batch-processing kill