2013-03-27 46 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 
相关问题