string - 用于在目录和所有子目录中查找字符串的批处理脚本

标签 string directory root

我想写一个批处理文件,它使用 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 文件中。我知道这一定是语法方面的问题,但我似乎无法弄明白。

最佳答案

你的脚本有一些错误:

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

  2. 后的空格
  3. 要扩展变量,您必须在变量名前后放置一个百分号,所以不要使用%var,而是使用%var% .

  4. 与您的问题没有直接关系,但为什么要两次调用 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

关于string - 用于在目录和所有子目录中查找字符串的批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348135/

相关文章:

ruby-on-rails - 将根 url 重定向到 Rails 应用程序中的其他位置

android - 如何构建将用户操作限制在 Android 上的单个应用程序的软件?

Java 使用 linux sudo 能力

javascript - 匹配除 master | 之外的所有字符串开发者

java - 有没有办法连接字符串,每个字符串都有一个特定的周围字符串?

powershell - 列出 UNC 根文件夹中的文件夹和文件

linux - Unix Shell 在里面创建多个目录和随机文件(空)

javascript - 使用 JavaScript 查找字符串中的空格数

java - Scala RegEx 字符串提取器的行为不一致

file - Unix - 将一个目录的内容复制到另一个目录