【问题标题】:Batch Script to find string in directory and all subdirectories在目录和所有子目录中查找字符串的批处理脚本
【发布时间】:2012-11-01 03:18:16
【问题描述】:

我想编写一个批处理文件,它使用 find 命令在父目录和所有子目录中查找字符串,并将该输出打印到文本文件,然后在完成后打开文本文件。到目前为止,我的代码如下所示:

@echo off
set /p "var1= Enter the String to Find: "
for /F "delims=" %a in ('dir /B /S *.txt') do @(find /i "%var1" "%a" 1>nul 2>&1 && find /i "%var1" "%a") >> result.txt
start result.txt

但这目前甚至没有向 result.txt 写入任何内容,即使我确信我正在搜索的字符串出现在多个 .txt 文件中。我知道它一定是语法方面的东西,但我似乎无法弄清楚。

【问题讨论】:

    标签: string directory root


    【解决方案1】:

    只要找到str abc *

    相比之下,findstr /v 将打印所有没有 abc

    【讨论】:

      【解决方案2】:

      您的脚本中有一些错误:

      1. set 命令的等号后不应有空格。具体来说,去掉set /p "var1=之后的空格。

      2. 1234563
      3. 与您的问题没有直接关系,但您为什么要调用find 两次?

      我还使用了一个临时文件,这样result.txt 就不会被find 搜索到。

      请注意,如果您从文件运行批处理脚本,则在使用循环变量时需要使用双百分号,例如:%%a

      无论如何,这是固定的脚本,希望能做你想做的事:

      @echo off
      set RESULT_FILE="result.txt"
      set /p "var1=Enter the String to Find: "
      
      pushd %~p0
      type NUL > %RESULT_FILE%.tmp
      for /f "delims=" %%a in ('dir /B /S *.txt') do (
          for /f "tokens=3 delims=:" %%c in ('find /i /c "%var1%" "%%a"') do (
              for /f "tokens=*" %%f in ('find /i "%var1%" "%%a"') do if %%c neq 0 echo %%f
          )
      ) >> "%RESULT_FILE%".tmp
      move %RESULT_FILE%.tmp %RESULT_FILE% >nul 2>&1
      
      :: Open the file
      "%RESULT_FILE%"
      popd
      

      【讨论】:

      • 有什么办法可以让脚本搜索脚本文件实际所在的目录和子目录。目前,如果我以管理员身份运行它,它只会在 system32 文件夹中找到文件,但我将脚本放在外部硬盘驱动器上的文件夹中并想在那里搜索。
      • 我厌倦了这样的东西 set Pathname="U:\some_folder" cd /d %Pathname% 但它似乎卡住了,什么也没写。
      • 实际上,您在第一行之后插入行pushd %~p0,并在脚本的最后插入行popd。它将当前目录更改为%~p0,扩展为脚本所在的目录,然后在脚本执行完毕后又变回上一个目录。
      • 啊我看到所有的工作,但它仍然打印目录中每个文本文件的路径,即使那个 .txt 不包含字符串。如果查找实际上是成功的,有没有办法让它只写入 result.txt?
      • 我确信有更好的解决方案可以避免find 的双重调用...无论如何,我很高兴你发现它很有用。
      猜你喜欢
      • 2012-03-11
      • 2013-04-11
      • 2015-11-04
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      相关资源
      最近更新 更多