0

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" 

どうしたの?

4

2 に答える 2

3

FORループはparsed、最後のFOR閉じ括弧 (つまりALL、投稿したコードセグメント) までです。この時点で、ANYは変数の (つまり、 PARSE -TIME) 値に%var%置き換えられます。その後、コードが実行されます。THEN-CURRENT

したがって%date% %time%、コマンドが解析された時点での値に置き換えられました。

この問題は、少なくとも 3 つの方法で解決できます。

1/SETLOCAL ENABLEDELAYEDEXPANSION命令によって呼び出される DELAYED EXPANSION で、%var% STILL が PARSE-TIME 値を!var!示しているが、RUN-TIME 値を示している場合 2/ CALLing による間接展開%%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
于 2013-03-27T08:39:36.707 に答える
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
)
于 2013-03-27T08:28:09.380 に答える