2

我想从文件的最后两行获取时间戳,使用 DOS 看起来像这样:

2/3/2013 18:30:00 这是第 1 行
2/3/2013 19:24:05 这是第 2 行
2/3/2013 20:10:40 这是第 3 行
2/3/2013 21:06:00 这是第 4 行
2/3/2013 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%!
...

此外,如果您只需要最后两行,您可以考虑另一种方法。您可以只使用两个变量,而不是为文本的每一行使用一个单独的变量:一个存储当前行,另一个存储前一行的前一个值。这就是我的意思:

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 回答