用于从日志文件中读取特定行的批处理脚本

时间:2018-01-25 14:03:24

标签: batch-file

我正在尝试编写一个批处理脚本,该脚本从.log文件中读取第18行并输出相同的内容。 .log文件名每次都有所不同。 abc_XXXX.log其中xxxx是进程ID。下面是我试图实现此目的的代码。

:Test1
set "xprvar=" for /F "skip=17 delims=" %%p in (abc*.log) do (echo %%p& goto 
break)

:break
pause
goto END  

3 个答案:

答案 0 :(得分:1)

set var=anyCommand无效。它只是将var设置为文字字符串。

使用for /f是正确的方法,只是变量赋值不同:

for /F "skip=17 delims=" %%p in ('dir /b abc*.log') do  ( set "xprvar=%%p"& goto break )

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
FOR %%f IN (abc*.log) DO (
 SET "reported="
 FOR /f "skip=17delims=" %%p IN (%%f) DO IF NOT DEFINED reported (
  ECHO %%p
  SET "reported=Y"
 )
)

依次将每个文件名分配给%%f

对于找到的每个文件名,清除reported标志然后读取文件,跳过前17行。 echo第18行并设置reported标记,以便其余行不是echo

答案 2 :(得分:0)

还有一个使用FindStr

的选项
@Echo Off
For /F "Tokens=1-2* Delims=:" %%A In ('FindStr/N "^" "abc_*.log" 2^>Nul'
) Do If %%B Equ 18 Echo %%A:%%C
Pause

以上示例Echo<filename><18th line content>,但在适当的情况下没有理由不能将其更改为:

@Echo Off
For /F "Tokens=1-2* Delims=:" %%A In ('FindStr/N "^" "abc_*.log" 2^>Nul'
) Do If %%B Equ 18 Set "xprvar=%%C"

如果目录中有多个匹配的文件名,则该变量将设置为解析的最后一个文件中的内容。