Batch file 批处理脚本读取日志文件的最后两行

Batch file 批处理脚本读取日志文件的最后两行,batch-file,logfile,Batch File,Logfile,我想读日志文件的最后两行,下面的代码正在打印所有的行 @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=%pr

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

@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

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

我应该建议,如果您的批次读数与您发布的完全一致,我相信您会遇到麻烦

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

@回音 setlocal EnableDelayedExpansion /f delims的rem=%%x在C:\FICO\test\u script\retcodeStartClientKYC.txt中 对于q65761009.txt中的/f delims=%%x 设置上一个=!最后的 最后设置=%%x 回响以前的 设置var1=%last% 设置变量2=%var1::=% 回音%var2% 后藤:EOF 注意:如果从日志文件中删除了源数据,则没有显示任何示例。我使用了一个随机文本样本,将其放入一个名为q65761009.txt的文件中,该文件适合我的系统

现在-要使用代码,请使用适当的文本编辑器(如Editplus或Notepad++等)将需要的代码复制/粘贴并编辑到.bat文件中-必要时,请使用记事本,但请注意批处理对布局敏感,记事本有一个可怕的习惯,即在保存时尝试重新格式化。保存为ANSI格式,而不是Unicode格式

不幸的是,你的操纵无法解释。正如您所编码的,它似乎在回显最后一行,然后删除最后一行中第一个冒号之前的所有文本,并回显其余的文本

由于您没有表现出对结果的期望,我们无法确定您的意图;但最后一点似乎值得怀疑。水晶球告诉我,您打算回显前面最后一行的第二行和第一个冒号之后最后一行的部分,因此我修改了代码来实现这一点

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

由于您显然是在扩展一个文件,因此可以在每个适当的回显末尾使用>>文件名。或者,您可能想重新创建一个文件——只包含两个echo语句生成的数据;你不会说


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

好的,我承认我不理解您的答案。前几段没有提到这个问题。你能澄清一下解决方案是什么吗?您的解决方案中的代码看起来与问题中的代码完全相同。遗憾的是,@Dharman,您似乎不理解这个问题。OP的代码实际上是有效的-这可能是一个格式问题,因此有关于编辑器和剪切/粘贴的建议,还有一些更改-将set命令括在引号中,并为最后一次输出选择适当的变量last代替先前的可能您应该看到原始发布,我将其重新格式化为现在显示的形式。很明显,如果这是实际使用的代码的正确表示,它会给您带来麻烦-正如我建议的那样。代码没有打印OP的问题所在的所有行。您发布的代码应该将retcodeStartClientKYC.txt中最后第二行的第一个冒号:,之后的所有内容输出到results.txt。但是,文本文件的内容、编码和行尾可能会导致问题。文本文件应该是UTF-8或ANSI编码的,而不是UTF-16 LE,并且应该使用Windows CRLF或Unix LF行结尾,而不是MAC CR。但是,如果没有fie内容,我无法建议您在这个特定实例中是否包含更健壮的代码,例如第3、8和9行的双引号,以及第10行带有括号的延迟扩展。