使用.bat文件

时间:2015-11-24 15:50:36

标签: windows batch-file

批处理文件脚本对我来说是全新的,所以请耐心等待我......

为了在Windows(10,64位)环境中运行许多(例如 5076)计算,我使用.bat文件:

gulp.exe < input-1.dat > output-1.out
gulp.exe < input-2.dat > output-2.out
gulp.exe < input-3.dat > output-3.out
                 .
                 .
                 .
gulp.exe < input-5076.dat > output-5076.out

不幸的是,有些计算会挂起(原因不明)......目前,当发生这种情况时,我会手动终止整批命令......这意味着我必须密切关注计算的进展情况并且不能简单地让它们运行(例如一夜之间)

因此,我正在寻找一种自动杀死gulp.exe可执行文件的方法,如果它已经运行了30分钟,但是这意味着我的列表中的下一个计算仍在运行。
即。如果计算2挂起,则将其终止并运行计算3

搜索[1 , 2] 表示taskkill可能是我正在寻找的命令,但是它是否会杀死.bat脚本或可执行文件以及如何将其应用于列表中的多个计算而感到有点困惑。

因此,我真的很感激一些指示...... 感谢

1 个答案:

答案 0 :(得分:1)

计算消耗CPU时间,因此您可以使用内置typeperf在1秒样本中对其进行分析,假设一次只能运行一个GULP进程。

@echo off

set INTERVAL=1
set CPUTHRESHOLD=0.1

call :runGulp "input-1.dat" "output-1.out"
call :runGulp "input-2.dat" "output-2.out"
call :runGulp "input-3.dat" "output-3.out"

pause
exit /b

:runGulp
    start /b gulp <"%~1" >"%~2"
    :wait
        for /f "delims=, tokens=2 skip=2" %%a in ('
            typeperf "\Process(GULP)\%% Processor Time" -si %INTERVAL% -sc 1
        ') do (
            if %%~a GEQ %CPUTHRESHOLD% goto wait
            if %%~a==-1 exit /b
        )
    taskkill /f /im gulp.exe
    exit /b