这个示例脚本定义了一个 :TimeDiff 的子例程,用于计算两个时间的差异。脚本开始时记录开始时间,结束时记录结束时间,并调用 :TimeDiff 函数计算时间差异,最后打印执行时间。请注意,这个方法只能计算同一天内的时间差异,不适用于跨天的情况。
@echo off
setlocal enabledelayedexpansion
REM 记录脚本开始时间
set "start_time=!TIME!"
REM 在这里写入你的脚本逻辑
echo "This is a sample script."
timeout /t 5 >nul
REM 记录脚本结束时间
set "end_time=!TIME!"
REM 计算时间差异
call :TimeDiff !start_time! !end_time!
REM 打印执行时间
echo "Script execution time: !time_diff!"
exit /b 0
:TimeDiff
REM 计算时间差异的函数
set "start_time=%1"
set "end_time=%2"
set "start_hour=!start_time:~0,2!"
set "start_minute=!start_time:~3,2!"
set "start_second=!start_time:~6,2!"
set "end_hour=!end_time:~0,2!"
set "end_minute=!end_time:~3,2!"
set "end_second=!end_time:~6,2!"
set /a "hour_diff=end_hour-start_hour"
set /a "minute_diff=end_minute-start_minute"
set /a "second_diff=end_second-start_second"
if %second_diff% lss 0 (
set /a "minute_diff=minute_diff-1"
set /a "second_diff=second_diff+60"
)
if %minute_diff% lss 0 (
set /a "hour_diff=hour_diff-1"
set /a "minute_diff=minute_diff+60"
)
set "time_diff=!hour_diff!:!minute_diff!:!second_diff!"
exit /b
上面脚本执行显示结果如下:
F:\BAT> .\diff.bat "This is a sample script." "Script execution time: 0:0:5"
setlocal enabledelayedexpansion 是 Windows Batch 脚本中的一条命令,用于启用延迟环境变量扩展。在 Batch 脚本中,环境变量在脚本开始执行时就被批处理解释器解析,这意味着在执行过程中对变量的更改不会立即反映在后续的代码中。
启用延迟环境变量扩展后,可以使用 ! 来延迟解析环境变量。这对于在循环中修改变量并在同一次迭代中引用已修改的值非常有用。
@echo off
setlocal enabledelayedexpansion
set count=0
for /L %%i in (1,1,5) do (
set /a count+=1
echo Inside loop: count is !count!
)
echo Outside loop: count is %count%
endlocal
在这个例子中,如果不启用延迟环境变量扩展,那么在循环内部使用 !count! 将无法正确地获取修改后的值。启用延迟环境变量扩展后,!count! 将正确地显示在循环内部进行的递增操作。