正确设置批处理if语句

时间:2015-06-04 16:13:44

标签: batch-file timer batch-processing

我已将计时器写入批处理脚本,因此我可以将文件的实时执行与其内部运行时间进行比较,如下所示:

@echo off
setlocal enabledelayedexpansion
cls

for /f "delims=_" %%J in ('forfiles /p "%%F" /m *.ext /c "cmd /c echo @path"') DO (
    set start=!time!
    echo Start Time: !start!
    start "PROGRAM" /D "C:Program Files\Path\to\PROGRAM"
    set end=!time!
    echo End Time: !end! 
    for /F "tokens=1-4 delims=:.," %%a in ("!start!") do (
        set /a "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
    )       

for /F "tokens=1-4 delims=:.," %%a in ("!end!") do (
        set /a "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
    )
set /A elapsed=end-start
if !elapsed! lss 0 set /a elapsed + 8640000 
echo Elapsed Time: !elapsed!

第二行到最后一行if声明是为了解决脚本运行过午夜的问题,然而,它似乎没有工作,我仍然会得到负面的时间。谁能在这里发现错误?

此外,我想创建另一层错误报告,以便即使前面提到的代码行完美,我还想添加另一层,如果是会设置!过去了!如果否定则为null。可能很重要的是要注意我在批准和学习所有这些时仍然是新手。

1 个答案:

答案 0 :(得分:2)

阅读set /a command line reference或此great resource。因此,您的行可以如下:

if !elapsed! lss 0 set /a "elapsed+=8640000"

或(给出相同的结果)

if !elapsed! lss 0 set /a "elapsed = elapsed + 8640000"