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

Batch file 从日志文件中读取特定行的批处理脚本,batch-file,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 set var=anyCommand不起作用。它只是将var设置为文本字符

我试图编写一个批处理脚本,从.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  
set var=anyCommand不起作用。它只是将var设置为文本字符串

使用afor/f是正确的方法,只是变量赋值的工作方式不同:

for /F "skip=17 delims=" %%p in ('dir /b abc*.log') do  ( set "xprvar=%%p"& goto break )
@回音 SETLOCAL 对于abc*.log DO中的%%f 集合报告= 对于/f skip=17delims=%%p,如果未定义,则报告%%f DO 回声%%p 集合报告=Y 依次将每个文件名分配给%%f


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

还有一个使用FindStr的选项

@回音 对于/F标记=1-2*Delims=:%%A,位于'FindStr/N^abc_*.log 2^>Nul' 如果%%B eq 18 Echo%%A:%%C,则执行此操作 暂停 上面的示例重复了:,但在适当的情况下,没有理由不将其更改为:

@回音 对于/F标记=1-2*Delims=:%%A,位于'FindStr/N^abc_*.log 2^>Nul' 如果%%B Equ 18设置xprvar=%C,则执行此操作 如果目录中有多个匹配的文件名,变量将被设置为上次解析的文件中的内容。

我尝试了/F skip=17 delims=%p in abc*.log do set xprvar=%p&goto break当我运行它时,我收到一个错误,说系统找不到文件abc*.log,即使该文件位于运行批处理的同一文件夹中。