You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下递归搜索含指定字符串文件的脚本需求

多类型文件内容搜索Windows脚本

问题说明

你之前使用的findstr仅能处理纯文本文件(如记事本的.txt),对Word、Excel、PDF这类结构化/二进制格式的文件完全无效,甚至会因为二进制内容中的随机字符匹配到无关结果,所以需要针对不同文件类型用对应工具处理。

脚本方案(批处理+PowerShell混合)

这个脚本会自动遍历当前目录及子目录,针对不同文件类型提取内容并搜索指定关键词,最终把匹配的文件路径汇总到search_results.txt中。

前置准备

  1. 若要搜索PDF文件,需先安装pdftotext工具(属于poppler套件,可下载绿色版解压后将其所在路径添加到系统环境变量)。
  2. 确保PowerShell版本≥5.1(Windows 10/11默认已满足)。

脚本代码(保存为SearchFiles.bat)

@echo off
setlocal enabledelayedexpansion

:: 提示用户输入搜索关键词
set /p "SEARCH_TERM=请输入要搜索的字符串:"

:: 清空并初始化结果文件
echo 搜索结果(关键词:%SEARCH_TERM%)> search_results.txt
echo ------------------------------ >> search_results.txt

:: 1. 处理纯文本文件(txt、log、ini等)
echo 正在搜索纯文本文件...
findstr /s /i /m /c:"%SEARCH_TERM%" *.txt *.log *.ini *.csv >> search_results.txt 2>nul

:: 2. 处理Word文档(docx/doc)
echo 正在搜索Word文档...
powershell -Command "$searchTerm='%SEARCH_TERM%'; Get-ChildItem -Recurse -Include *.docx,*.doc | ForEach-Object { try { if ($_.Extension -eq '.docx') { $zip = [System.IO.Compression.ZipFile]::OpenRead($_.FullName); $entry = $zip.GetEntry('word/document.xml'); if ($entry) { $reader = New-Object System.IO.StreamReader($entry.Open()); $text = $reader.ReadToEnd(); $reader.Close(); $zip.Close(); if ($text -match [regex]::Escape($searchTerm)) { $_.FullName } } } else { $word = New-Object -ComObject Word.Application; $word.Visible = $false; $doc = $word.Documents.Open($_.FullName); $text = $doc.Content.Text; $doc.Close($false); $word.Quit(); if ($text -match [regex]::Escape($searchTerm)) { $_.FullName } } } catch { Write-Host '无法读取文件:' $_.FullName } }" >> search_results.txt 2>nul

:: 3. 处理Excel文件(xlsx/xls)
echo 正在搜索Excel文档...
powershell -Command "$searchTerm='%SEARCH_TERM%'; Get-ChildItem -Recurse -Include *.xlsx,*.xls | ForEach-Object { try { $excel = New-Object -ComObject Excel.Application; $excel.Visible = $false; $wb = $excel.Workbooks.Open($_.FullName); $text = $wb.Worksheets | ForEach-Object { $_.UsedRange.Text } | Out-String; $wb.Close($false); $excel.Quit(); if ($text -match [regex]::Escape($searchTerm)) { $_.FullName } } catch { Write-Host '无法读取文件:' $_.FullName } }" >> search_results.txt 2>nul

:: 4. 处理PDF文件(需pdftotext)
echo 正在搜索PDF文件...
for /r %%f in (*.pdf) do (
    pdftotext "%%f" - | findstr /i /m /c:"%SEARCH_TERM%" >nul
    if not errorlevel 1 (
        echo %%f >> search_results.txt
    )
)

echo 搜索完成,结果已保存到 search_results.txt
pause

使用说明

  1. 将脚本保存为SearchFiles.bat,放到你要搜索的文件夹根目录。
  2. 双击运行,输入目标搜索关键词(比如vijay或vijay kumar)。
  3. 等待脚本执行完成,打开search_results.txt查看所有匹配的文件路径。

注意事项

  • 处理Word/Excel时会调用Office COM对象,若未安装Office,这部分功能会失效,可改用DocX、EPPlus等开源PowerShell模块替代。
  • 若不需要搜索PDF,可直接删除脚本中处理PDF的代码块。
  • 脚本会自动跳过损坏或无法读取的文件,并在控制台提示对应文件名。

内容的提问来源于stack exchange,提问作者vijayakumar ponnusamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:17