我正在尝试编写一个批处理脚本,该脚本从.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
答案 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"
如果目录中有多个匹配的文件名,则该变量将设置为解析的最后一个文件中的内容。