2013-03-27 31 views
0

我寫一個批處理文件,以獲得CMD的開始時間爲聲明:爲什麼我在dos-batch文件中得到同樣的時間?

for /L %%i in (1,1,3) do (
echo %%i 
echo "traceroute %%i start at %date% %time%" >tr%%i.txt 
adb shell "/data/local/traceroute smtp.163.com" 2>&1 >>tr%%i.txt 
) 

,但得到的結果3文件同時:

"traceroute 1 start at 2013/03/27 週三 15:48:47.12" 

"traceroute 2 start at 2013/03/27 週三 15:48:47.12" 

"traceroute 3 start at 2013/03/27 週三 15:48:47.12" 

有什麼不對?

回答

1

你應該使用延遲擴展!variable! S:。

@echo off &setlocal enabledelayedexpansion 
for /L %%i in (1,1,3) do (
echo %%i 
echo "traceroute %%i start at !date! !time!" >tr%%i.txt 
adb shell "/data/local/traceroute smtp.163.com" 2>&1 >>tr%%i.txt 
) 
3

一個FOR循環是從FOR到最終結束括號(即ALL您發佈的代碼段的parsed此時,任何%var%將被替換爲變量的THEN-CURRENT(即PARSE-TIME)值。然後代碼被執行。

因此%date% %time%被命令PARSED時的值所取代。

可以克服的問題,至少在三個方面:

1 /遲發擴張,由SETLOCAL ENABLEDELAYEDEXPANSION指令調用時%VAR%仍顯示分析時的價值,但!var!顯示了運行時間值 2 /間接膨脹通過調用%%var%% 3 /使用的子程序或外部批處理文件

嘗試此代碼:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR %%i IN (1 2 3) DO (
ECHO START of run %%i 
ECHO using ^!time^! : !time! - PARSE TIME was %time% 
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%% 
CALL :report 
timeout /t 5 
ECHO using ^!time^! : !time! 
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%% 
CALL :report 
ECHO END of run %%i 
ECHO. 
) 
GOTO :eof 

:report 
ECHO :report says TIME is %TIME% 
GOTO :eof 
相關問題