0

我有几个目录都包含一个单独的日志文件,我需要从中提取某些文本。这方面的一个例子是 log.txt 包含信息 = 1,我需要在 = 之后提取所有数据。我不能使用 powershell 或任何其他语言。我以前从未批量编写脚本,所以我不确定从哪里开始。目前,我可以使用以下命令搜索包含此日志文件的目录:

dir /s log.txt > C:\saveLog.txt
4

2 回答 2

0
@echo off
for /F "tokens=1,3 delims=:=" %%a in ('findstr /S /C:"information = " log.txt') do (
   echo Filename: %%a; Information: %%b
)
于 2013-07-16T01:50:58.997 回答
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根据需要更改该行以报告您要报告的内容。

仅供参考 - 内部 for 循环将 log.txt 文件的每一行分成两部分。第一部分是=标志左侧的文本,可通过 访问%%j。第二部分是=标志右侧的文本,可通过 访问%%k。这是通过添加/f "tokens=1* delims=="到 for 循环命令来完成的。

编辑 1

  • 将内部 for 循环更改为使用短文件名,以便路径中的空格不会中断循环。
  • 将变量更改%%j为实变量,以便我们可以进行字符替换并消除=符号前的空格(如果存在)。这保留%%k=标志后的内容。
  • 将比较语句更改if为不区分大小写。
于 2013-07-15T18:45:01.353 回答