2

DOS を使用して、次のようなファイルの最後の 2 行からタイム スタンプを取得したいと考えています。

2013/2/3 18:30:00 これは 1 行目です
2013/2/3 19:24:05 これは 2 行目です
2013/2/3 20:10:40 これは 3 行目です
2013/2/3 21:06:00 これは 4 行目です
2013/2/3 22:50:31 これは 5 行目です

現在、私のスクリプトは次のようになっています。

setlocal EnableDelayedExpansion
set i=0

for /f "tokens=2" %%x in (inputfile.txt) do (
    set /a i=!i!+1
    set time!i!=%%x
)

set /a lasttime=time!i!
set /a j=!i!-1
set /a prevtime=time!j!
echo %lasttime%
echo %prevtime%
endlocal

出力には時間の部分のみがあり、分と秒はありません。

21
22

それを機能させる方法を教えてください。

4

1 に答える 1

2

問題は、とSET /Aを割り当てるためのコマンドを使用していることです。lasttimeprevtime

SET /Aは算術演算に使用され、値を別の変数に格納する以外に値を使用して何もしていない場合でも、フィードするすべてのものを数値に変換する必要があります。参照time!i!は評価され22:50:31ますが、コマンドのコンテキストでは、SET /Aすぐに最も近い数値である。に変換されます22。同じことが。でも起こりtime!j!ます。

この問題を修正するには、次のような単純なSETコマンドと混合拡張を使用します。

...
set lasttime=!time%i%!
set /a j=!i!-1
set prevtime=!time%j%!
...

また、必要なのが最後の2行だけである場合は、別のアプローチを検討できます。テキストの行ごとに個別の変数を使用する代わりに、2つだけを使用できます。1つは現在の行を格納し、もう1つは前者の前の値を格納します。これが私が意味することです:

setlocal EnableDelayedExpansion

for /f "tokens=2" %%x in (inputfile.txt) do (
    set prevtime=!lasttime!
    set lasttime=%%x
)

echo %lasttime%
echo %prevtime%
endlocal
于 2013-02-04T07:00:38.377 に答える