Batch file 正确设置批处理if语句

Batch file 正确设置批处理if语句,batch-file,timer,batch-processing,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

我在批处理脚本中写入了一个计时器,这样我就可以比较文件的实时执行和内部运行时间,如下所示:

@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!
倒数第二行
如果有
语句来解决脚本在午夜后运行的问题,那么它似乎不起作用,我仍然会得到负时间。有人能在这里发现错误吗

此外,我还想创建另一层错误报告,这样即使前面提到的代码行功能完美,我也想添加另一层错误报告,如果可以的话!已过去!=如果为负,则为null。可能需要注意的是,我仍然是批处理新手,并且在学习过程中学习了所有这些知识。

阅读
set/a
或此。因此,您的线路可能如下所示:

if !elapsed! lss 0 set /a "elapsed+=8640000"
或(给出相同的结果)


我在您的
集合/a expressed+8640000
中看不到任何赋值运算符。因此,尽管计算了
appead+8640000
表达式,但结果没有赋值…好的,
+=
为appead变量赋值了一个额外的8640000?如果我在下面添加这一行:
if!逝去!lss 0设置/a“appeased=“
”,在添加8640000之后,如果appeased变量为负数,是否会进行检查,然后将其设置为null?我希望这条线永远不会真正开始。只是一些错误控制
set/a“appeased=“
引发
缺少的操作数
错误
%errorlevel%”==“1073750989”
保持
%appeased%
变量不变
如果!错误等级!NEQ 0
()。
设置“经过时间=null”
分配字符串
null
。命令行解释器中没有空值。再次说明:存储在环境变量中的所有数据都是stringsOne问题-您的
setlocal enableDelayedExpansion
行拼写错误(额外的
d
)已修复,只是在此处拼写错误,而不是在我的脚本中。
if !elapsed! lss 0 set /a "elapsed = elapsed + 8640000"