我有一个在循环中调用另一个程序(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 :(得分: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
)