批处理文件返回到文本文件的最后一行

时间:2010-11-22 21:28:49

标签: windows batch-file dos

我有一个文件,其中包含写入文本文件的文件比较结果:
Comparing files C:\LOGS\old.txt and C:\LOGS\NEW.TXT
***** C:\LOGS\old.txt
***** C:\LOGS\NEW.TXT
folder_thats_different
*****

我需要拉出最后一行“folder_thats_different”并输入一个新字符串:
folder contains a file that is different: folder_thats_different

是的,我知道我可以使用其他语言,但我现在仍然处理批处理文件。

3 个答案:

答案 0 :(得分:3)

您可以尝试使用for循环读取它并获取当前行,并始终保存上一行

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%x in (myFile.txt) do (
    set "previous=!last!"
    set "last=%%x"
)
echo !previous!

答案 1 :(得分:0)

以下是您可以用作起点的示例。只需将set command=行中的文件名更改为相应的名称(或将命令替换为会使日志列表生成的任何内容)。

@echo off
@setlocal

(set command=type test.txt)

for /f "usebackq tokens=*" %%i in (`%command%`) do call :process_line %%i
echo next to last line: %old_line%
goto :eof

:process_line
(set old_line=%new_line%)
(set new_line=%*)
goto :eof

当然,除了简单地回显找到的行之外,你可能还想做点什么。

答案 2 :(得分:0)

第一个答案对我有用。我还在结束后添加了2行以允许它重复,这样我就可以观看活动日志文件而无需关闭并重新打开它。我为游戏Space Engineers中使用的mod做了很多调试。 我的版本看起来像这样:

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%x in (SpaceEngineers.log) do (
    set "previous=!last!"
    set "last=%%x"
)
echo !previous!
timeout 15 /nobreak
se_log

以下行停止批处理文件循环过快并停止关键旁路。要以秒为单位更改时间,只需将数字“15”更改为您想要的任何内容即可。要停止批处理文件,只需按 ctrl + c

timeout 15 /nobreak

以下行是我制作的批处理文件的名称,因此它会告诉CMD再次运行它。

se_log