2013-10-06 17 views
1

我有一个批处理代码,在循环中调用另一个程序(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 
    ) 

回答

0

编辑:这除了会杀死任何正在运行的meshlabserver.exe过程,但它会一直等待600秒,即使以前的任务只用了3分钟。

的taskkill和超时是在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 
    ) 
+0

如果我可以杀死正在运行的进程,那会更好,否则它会永远运行。 – SalamKh

+0

是引号是空的还是意味着在meshlabserver语句周围? – SalamKh

+0

他们是空的。您可以在两者之间放置文本,它将成为程序窗口的标题栏。当其他引用的术语符合要求并且是良好实践时,它们很重要。 – foxidrive

0

不,你不能批量。 FOR没有参数来执行此操作,并且不能以另一种方式中断对meshlabserver的调用,因为只要运行了meshlabserver,批处理脚本就被禁用。

如果您需要一个支持线程的编程语言,那么您可以在后台启动meshlabserver程序,等待它,然后杀死线程(甚至可能是进程本身)是否需要太长的时间才能满足您的需求。

+0

您可以使用'start'命令和计时器批量执行此操作。 – foxidrive