如何从DOS中的文本文件的最后2行提取信息

时间:2013-02-04 04:55:25

标签: batch-file dos

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

2/3/2013 18:30:00   This is line 1
2/3/2013 19:24:05   This is line 2
2/3/2013 20:10:40   This is line 3
2/3/2013 21:06:00   This is line 4
2/3/2013 22:50:31   This is line 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

请告诉我如何使其发挥作用。

1 个答案:

答案 0 :(得分:2)

问题是您使用SET /A命令分配lasttimeprevtime

SET /A用于算术运算,并且您提供的所有内容都必须转换为数字,即使您没有对该值进行任何操作,除了将其存储到另一个变量之外。您的time!i!引用的计算结果为22:50:31,但在SET /A命令的上下文中,它会立即转换为最接近的数值22time!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