首页 > 解决方案 > 批处理脚本读取日志文件的最后两行

问题描述

我想阅读日志文件的最后两行,下面的代码正在打印所有行

@echo on 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (C:\FICO\test_script\retcodeStartClientKYC.txt) do ( 
 set "previous=!last!" 
 set "last=%%x" 
)
echo !previous! 
set var1=%previous% 
set var2=%var1:*:=% 
echo %var2% >> result1.txt

谁能告诉我上面的代码有什么问题。

标签: batch-filelogfile

解决方案


我应该建议,如果您的批次与您发布的完全一样,我毫不怀疑您会遇到麻烦。

这是我重新格式化的版本:

@echo off
setlocal EnableDelayedExpansion 
rem for /f "delims=" %%x in (C:\FICO\test_script\retcodeStartClientKYC.txt) do ( 
for /f "delims=" %%x in (q65761009.txt) do ( 
 set "previous=!last!" 
 set "last=%%x" 
)
echo !previous! 
set "var1=%last%"
set "var2=%var1:*:=%"
echo %var2% 
GOTO :EOF

注意:您没有显示日志文件中的任何示例(如果已审查)源数据。我使用了一个随机文本样本,放入一个q65761009.txt适合我系统的名为的文件中。

现在 - 使用代码,复制/粘贴并根据需要.bat使用适当的文本编辑器编辑到文件中,如EditplusNotepad++(以及其他) - 在紧要关头,使用Notepad但要注意批处理对布局非常敏感并且Notepad有一个可怕的习惯保存时尝试重新格式化。以 ANSI 格式保存,而不是 Unicode。

不幸的是,您的操纵无法解释。正如您编写的那样,它似乎是echo倒数第二行,然后删除倒数第二行中第一个冒号之前的所有文本,然后echo对剩余部分进行 ing。

由于您没有表现出对结果的期望,我们无法确定您的意图;但最后一个似乎是可疑的。水晶球告诉我您打算使用echo倒数第二行 ( previous) 和最后一行的第一个冒号之后的部分,所以我修改了代码来做到这一点

提示:set "var1=data"用于设置值 - 这可以避免尾随空格引起的问题。

由于您显然是在扩展文件,因此您可以>>filename在每个适当的echo. 或者您可能想重新创建一个文件——只包含两个echo语句产生的数据;你不说...

但是 - 我发现上面的代码按照(我)的预期生成了两行(到控制台),并且文件中没有任何先前数据的迹象。


推荐阅读