我有几个目录都包含一个单独的日志文件,我需要从中提取某些文本。这样的一个例子是log.txt包含information = 1,我需要在=之后提取所有数据。我不能使用powershell或任何其他语言。我从来没有批量编写脚本,所以我不知道从哪里开始。目前,我可以使用以下方法搜索包含此日志文件的目录:
dir /s log.txt > C:\saveLog.txt
答案 0 :(得分:0)
您可以执行嵌套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
行,以报告您要报告的内容。
FYI - 内部for循环将log.txt文件的每一行拆分为两部分。第一部分是=
符号左侧的文字,可通过%%j
访问。第二部分是=
符号右侧的文本,可通过%%k
访问。这是通过将/f "tokens=1* delims=="
添加到for循环命令来完成的。
%%j
变量更改为实变量,以便我们可以进行字符替换并消除=
符号前的空格(如果存在)。这会将%%k
保留为=
符号后面的内容。if
比较语句更改为不区分大小写。答案 1 :(得分:0)
@echo off
for /F "tokens=1,3 delims=:=" %%a in ('findstr /S /C:"information = " log.txt') do (
echo Filename: %%a; Information: %%b
)