我有几个目录都包含一个单独的日志文件,我需要从中提取某些文本。这方面的一个例子是 log.txt 包含信息 = 1,我需要在 = 之后提取所有数据。我不能使用 powershell 或任何其他语言。我以前从未批量编写脚本,所以我不确定从哪里开始。目前,我可以使用以下命令搜索包含此日志文件的目录:
dir /s log.txt > C:\saveLog.txt
我有几个目录都包含一个单独的日志文件,我需要从中提取某些文本。这方面的一个例子是 log.txt 包含信息 = 1,我需要在 = 之后提取所有数据。我不能使用 powershell 或任何其他语言。我以前从未批量编写脚本,所以我不确定从哪里开始。目前,我可以使用以下命令搜索包含此日志文件的目录:
dir /s log.txt > C:\saveLog.txt
@echo off
for /F "tokens=1,3 delims=:=" %%a in ('findstr /S /C:"information = " log.txt') do (
echo Filename: %%a; Information: %%b
)
你可以做一个嵌套的for循环,在外循环的文件中循环,在内循环的日志文件中查找信息行:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ('dir /b /s log.txt') do (
for /f "tokens=1* delims==" %%j in (%%~si) do (
set _var=%%j
set _var=!_var: =!
if defined _var (
if /i "!_var!"=="information" (
echo Filename: %%i; Information: %%k
)
)
)
)
endlocal
这会报告日志文件名(及其路径)和=
登录每个文件后的信息。您可以echo
根据需要更改该行以报告您要报告的内容。
仅供参考 - 内部 for 循环将 log.txt 文件的每一行分成两部分。第一部分是=
标志左侧的文本,可通过 访问%%j
。第二部分是=
标志右侧的文本,可通过 访问%%k
。这是通过添加/f "tokens=1* delims=="
到 for 循环命令来完成的。
%%j
为实变量,以便我们可以进行字符替换并消除=
符号前的空格(如果存在)。这保留%%k
为=
标志后的内容。if
为不区分大小写。