Batch file 为什么我在同一时间内得到了dos语句批处理文件?

Batch file 为什么我在同一时间内得到了dos语句批处理文件?,batch-file,Batch File,我编写了一个批处理文件来获取for语句中cmd的开始时间: 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 20

我编写了一个批处理文件来获取for语句中cmd的开始时间:

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" 

怎么了?

您应该使用延迟扩展
!变数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
)

您应该使用延迟扩展
!变数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
)

FOR
循环从
FOR
解析到最后一个右括号(即
您发布的代码段的所有
。此时,任何
都将被
当前的
替换(即解析时间)变量的值。然后执行代码

因此,
%date%%time%
在解析命令时被其值替换

您至少可以通过三种方式克服此问题:

1/当%var%仍显示解析时间值,但
!var!
显示运行时间值时,通过
SETLOCAL ENABLEDELAYEDEXPANSION
指令调用延迟扩展 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

FOR
循环从
FOR
解析到最后一个右括号(即
您发布的代码段的所有
。此时,任何
都将被
当前的
替换(即解析时间)变量的值。然后执行代码

因此,
%date%%time%
在解析命令时被其值替换

您至少可以通过三种方式克服此问题:

1/当%var%仍显示解析时间值,但
!var!
显示运行时间值时,通过
SETLOCAL ENABLEDELAYEDEXPANSION
指令调用延迟扩展 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