【问题标题】:batch script read last two lines of log file批处理脚本读取日志文件的最后两行
【发布时间】:2021-04-21 22:52:34
【问题描述】:

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

@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

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

【问题讨论】:

  • 您发布的代码应该输出从retcodeStartClientKYC.txtresults.txt 的倒数第二行的第一个冒号: 之后的所有内容。但是,文本文件的内容、编码和行结尾可能会给您带来问题。文本文件应该是 UTF-8 或 ANSI 编码,而不是 UTF-16 LE,并且应该使用 Windows CRLF 或 Unix LF 行结尾,而不是 MAC CR。但是,如果没有 fie 内容,我无法建议您是否包含更健壮的代码,例如 389 行上的双引号,以及 10 行上的带括号的延迟扩展在这种特定情况下会有所帮助.

标签: batch-file logfile


【解决方案1】:

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

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

@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 的文件中。

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

很遗憾,您的操纵无法解释。正如您编写的那样,它似乎是 echoing 倒数第二行,然后删除倒数第二行第一个冒号之前的所有文本,然后 echoing 其余部分。

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

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

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

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

【讨论】:

  • 好的,我承认我不明白你的回答。前几段没有说明这个问题。你能澄清一下解决方案是什么吗?您的解决方案中的代码与问题中的代码完全相同。
  • 很遗憾,@Dharman,您似乎不明白这个问题。 OP 的代码实际上是有效的 - 它可能是一个格式问题(因此有关编辑器和剪切/粘贴的建议)并且有一些变化 - 将 set 命令括在引号中并为最后一个输出选择适当的变量(last 到位previous) 也许您应该看到原始帖子,我将其重新格式化为现在出现的表格。很明显,如果这是对所使用的实际代码的正确表示,它将带来麻烦——正如我所建议的那样。代码不是“打印所有行”,这是 OP 的问题。
猜你喜欢
  • 2015-02-09
  • 2014-08-22
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多