181

我必须在一个非常古老的遗留应用程序中更改一些连接字符串,而制作它的程序员认为在整个应用程序中到处都贴上连接字符串是一个好主意。

Visual Studio 的“当前项目”搜索速度非常慢,我不信任 Windows Search。

那么,最好的免费、非索引文本搜索工具是什么?它应该做的就是返回一个列表,其中包含在文件夹及其子文件夹中包含所需字符串的文件。

我正在运行 Windows 2003 服务器。

4

6 回答 6

379

我喜欢Notepad++中的Find-In-Files对话框。奖励:它是免费的。

在此处输入图像描述

于 2008-11-25T16:24:14.030 回答
184

还有一个 Windows 内置程序findstr.exe,您可以使用它在文件中进行搜索。

>findstr /s "provider=sqloledb" *.cs
于 2012-12-10T11:22:59.573 回答
66

原始答案

Windows Grep在这方面做得非常好。

编辑:开发人员不再维护或提供 Windows Grep。备用下载链接在这里:Windows Grep - 备用

当前答案

Visual Studio Code具有出色的跨文件搜索和替换功能。它非常快,支持正则表达式和替换前的实时预览。

在此处输入图像描述

于 2008-11-25T16:34:20.280 回答
36

我喜欢 AstroGrep。结果显示在列表中。单击一行可将整行显示为突出显示该命中的预览。它似乎很快,精简而且免费。在 Windows 7、8、10 和 Windows Server 2008 R2 上测试。允许正则表达式。

最新的 AstroGrep 截图

AstroGrep 是一个 Microsoft Windows GUI 文件搜索 (grep) 实用程序。它的功能包括正则表达式、多功能打印选项、存储最近使用的路径并具有非常适合查看源代码的“上下文”功能

参考:AstroGrep

于 2013-11-05T17:30:46.170 回答
9

Visual Studio 在文件夹中的搜索是迄今为止我发现的最快的。

我相信它只智能地搜索文本(非二进制)文件,并且在同一文件夹中的后续搜索非常快,这与其他工具不同(可能文本文件适合 Windows 磁盘缓存)。

VS2010 在普通硬盘驱动器上,没有 SSD,需要 1 分钟才能搜索 20GB 文件夹,其中包含 26k 文件、源代码和二进制文件。搜索了 15k 个文件 - 由于是二进制文件,其余文件可能被跳过。同一文件夹中的后续搜索大约是几秒钟(直到东西被从缓存中清除)。

我为同一个文件夹找到的下一个最接近的是 grepWin。3分钟左右。我排除了大于 2000KB 的文件(默认)。“包括二进制文件”设置似乎对加快搜索没有任何作用,看起来二进制文件仍然被触及(错误?),但它们没有出现在搜索结果中。随后的搜索都需要相同的 3 分钟 - 无法利用硬盘缓存。如果我限制小于 200k 的文件,则初始搜索为 2.5 分钟,随后的搜索大约为秒,大约与缓存中的 VS 一样快。

由于搜索所有内容,包括巨大的数 GB 二进制文件,Agent Ransack 和 FileSeek 在该文件夹上的速度都非常慢,大约需要 20 分钟。根据资源监视器,他们以每秒约 10-20MB 的速度搜索。

更新:可以将 Agent Ransack 设置为搜索特定大小的文件,使用 <200KB 的截止时间,新搜索需要 1:15 分钟,后续搜索需要 5 秒。比 grepWin 快,并且与 VS 整体一样快。如果您想在选项卡中保留多个搜索并且不想污染 VS 最近搜索的文件夹列表,并且想要保留搜索二进制文件的能力,这实际上非常好,而 VS 似乎不想这样做。Agent Ransack 还创建了一个资源管理器上下文菜单条目,因此很容易从文件夹启动。与 grepWin 相同,但 UI 更好,速度更快。

我的新搜索设置是针对内容的 Agent Ransack 和针对文件名的 Everything(很棒的工具,即时结果!)。

于 2014-12-04T22:37:08.780 回答
3

如果您不想安装非 Microsoft 工具,请从 Microsoft Sysinternals下载 STRINGS.EXE并制作如下程序:

@echo off
if '%1' == '' goto NOPARAM
if '%2' == '' goto NOPARAM
if not exist %1 goto NOFOLDER

echo ------------------------------------------
echo - %1 : folder
echo - %2 : string to be searched in the folder
echo - PLEASE WAIT FOR THE RESULTS ...
strings -s %1\* | findstr /i %2 > grep.txt
notepad.exe grep.txt

goto END

:NOPARAM rem - input command not correct
echo ====================================
echo Usage of GREP.CMD:
echo   Grep "SearchFolder" SearchString
echo Please specify all parameters
echo ====================================
goto END

:NOFOLDER
echo Folder %1 does not exist
goto END

:END rem - exit
于 2014-02-06T13:13:12.620 回答