经测试,call调用或者call延迟都会存在效率问题。
如果在处理量多的情况下,建议用setlocal开启延迟。反之,处理量少时可以用call。
测试以下两段代码:- @echo off
- ::用setlocal 延迟
- set t=%time%
- setlocal enabledelayedexpansion
- for /l %%a in (1 1 100) do set "var=000%%a"&echo !var:~-3!
- call :time0 "%t%" "%time%" "ok"
- echo.&echo 耗时: %ok%
- pause&exit/b
-
- :time0 以下为封装部分。
- :: code 随风 @bbs.bathone.cn 2008-08-15
- setlocal&set /a n=0
- for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
- set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
- set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100
- )
- set "n=%n:-=%"
- set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
- set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒"
- endlocal&set "%~3=%ok%"&goto :eof
复制代码
- @echo off
- :: 用call延迟
- set t=%time%
- for /l %%a in (1 1 100) do set "var=000%%a"&call echo %%var:~-3%%
- call :time0 "%t%" "%time%" "ok"
- echo.&echo 耗时: %ok%
- pause&exit/b
-
- :time0 以下为封装部分。
- :: code 随风 @bbs.bathone.cn 2008-08-15
- setlocal&set /a n=0
- for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
- set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
- set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100
- )
- set "n=%n:-=%"
- set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
- set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒"
- endlocal&set "%~3=%ok%"&goto :eof
复制代码
|