如何在循环中设置时间限制(批处理文件)

时间:2013-10-06 07:26:01

标签: batch-file timer cmd

我有一个在循环中调用另一个程序(meshlab)的批处理代码,一个实例的平均时间大约是6分钟,有时需要更多的时间(可能卡在一些复杂的计算中)。所以我想知道是否有可能为循环设置定时器以继续下一步。以下是代码示例:

   FOR %%I IN (C:\Users\Salam\Desktop\PreProcessed_Bosphorus\bs!var!\*.ply) DO (
        meshlabserver -i %%~dpnxI -o %%~nI.ply -s C:\Users\Salam\Desktop\PreProcessed_Bosphorus\iso_per.mlx -om vn -l %%~nI.txt
    )

2 个答案:

答案 0 :(得分:0)

不,你不能批量生产。 FOR没有参数来执行此操作,并且您无法以其他方式中断对meshlabserver的调用,因为只要meshlabserver正在运行,批处理脚本就会被禁用。

如果您有一个支持线程的编程语言,那么您可以在后台触发meshlabserver程序,等待它,并终止线程(甚至可能是进程本身),这对您的喜好来说需要太长时间。

答案 1 :(得分:0)

编辑:此添加将终止任何正在运行的meshlabserver.exe进程,但它将始终等待600秒,即使上一个任务仅耗时3分钟。

taskkill和timeout是在Windows Vista和更高版本的IIRC中

这将启动一个实例,并等待600秒,然后它将遍历循环并启动另一个实例。您想要kill正在运行的进程,还是只想启动另一个meshlabserver实例?

FOR %%I IN (C:\Users\Salam\Desktop\PreProcessed_Bosphorus\bs!var!\*.ply) DO (
        start "" meshlabserver -i %%~dpnxI -o %%~nI.ply -s C:\Users\Salam\Desktop\PreProcessed_Bosphorus\iso_per.mlx -om vn -l %%~nI.txt
        timeout 600 >nul
        taskkill /f /im meshlabserver.exe >nul 2>&1
    )