我之前使用%time%进行计时 - 至少我认为我有。我有这个奇怪的
IF NOT "%1" == "" (
echo Testing: %1
echo Start: %time%
sqlcmd -S MYSERVER -i test_import_%1.sql -o "test_%1%.log"
sleep 3
echo End: %time%
)
我运行它,然后打印:
Testing: pm
Start: 13:29:45.30
End: 13:29:45.30
在这种情况下,我的sql代码失败(不同的原因),但我认为睡眠3应该至少使时间增加3。有任何想法吗? TX, TFF
答案 0 :(得分:3)
这与(不)延迟扩展有关,但我不记得它是如何工作的。你可以使用这样的“子程序”解决它:
@echo off
if "%1" == "" (
call :doit
)
echo done
goto :eof
:doit
echo %time%
sleep 1
echo %time%
goto :eof
输出:
C:\temp>q
19:46:36.43
19:46:37.45
done
执行此操作的“正确”方式可能类似于(来自this entry in Raymon Chen's blog):
setlocal enabledelayedexpansion
if "%1" == "" (
echo !time!
sleep 2
echo !time!
)
要“看到”立即展开的问题,只需运行此操作(不带 echo off
):
if "%1" == "" (
echo %time%
sleep 2
echo %time%
)
输出(在Windows 7上):
C:\temp>if "" == "" (
echo 19:48:31.95
sleep 2
echo 19:48:31.95
)
19:48:31.95
19:48:31.95
当解析if
时,变量全部同时展开。
答案 1 :(得分:1)
Pause
根本不接受参数。它不会失败,但它也不会继续。如果一切正常,您应该看到按键的提示。
获得的时间是脚本启动的时间。显然,在执行脚本期间不会更新%time%
环境变量。
答案 2 :(得分:1)
DOS没有“睡眠”功能。您需要将其添加到批处理文件的末尾(或类似的内容):
@ECHO off
TITLE Initial title
SET TITLETEXT=Sleep
:: start of script
CALL :sleep 5
:: rest of script
GOTO :END
:: Function
:sleep ARG
ECHO Pausing...
FOR /l %%a in (%~1,-1,1) do (TITLE %TITLETEXT% -- time left %%as&PING.exe -n 2 -w 1 127.0.0.1>nul)
EXIT /B 0
:END
pause
::this is EOF
我测试了这段代码,它应该可以正常工作。