如何在命令提示符中进行简单的文件搜索

207
我希望能够在Windows命令行(非PowerShell)中,通过文件名或部分文件名快速搜索文件。这类似于打开资源管理器并使用顶部的搜索框进行搜索。
注意:`dir` 命令可以基于字符串模板进行搜索,但它不会在子目录中搜索。
注意2:`findstr` 命令可以用于在文件中搜索标记,并具有递归标记。有趣的是,更复杂的搜索可以很容易地发现...

可能是 http://superuser.com/questions/177234/can-i-use-cmd-to-search-for-files-in-windows 的重复问题。 - handle
5个回答

277

dir /s *foo* 搜索当前文件夹及其子文件夹。

它可以找到目录以及文件。

/s 的意思是(文档)

/s 列出指定目录及其所有子目录中指定文件名的每个实例。


我还有一个问题,如何将这些找到的文件复制到另一个文件夹?非常感谢。 - Hong Cheng
@HongCheng 在使用 Xcopy 命令时,你可以结合通配符来查找文件。在使用 xcopy *foo* c:\Temp 命令前,请先通过上面的 DIR 命令验证输出结果,以便将所有 *foo* 文件复制到 c:\Temp 目录中。 - Vinod Srivastav
1
这个命令无法找到我知道存在于当前目录子文件夹中的文件。导航到该文件夹并搜索可以得到结果,但是在通过父目录搜索时找不到。是否有其他更强大的命令? - Joe Dimig
@JoeDimig 可能是一个系统或隐藏文件,你可以使用 dir /a:h /s /bdir /a:s /s /b。更多参考请见 https://dev59.com/Cmsz5IYBdhLWcg3wLU12#25717502。 - Vinod Srivastav

183
请尝试以下命令:

列出当前目录及其子目录中的所有文件

dir /b/s *.txt  

以上命令在目录树中搜索所有txt文件。

但是由于Windows开始将目录命名为.nuget.vscode,因此它也使用上述命令。

为了避免这种情况,并获得一个干净的列表,请使用/a:-d筛选器。

dir /a:-d /b/s

在使用之前,只需将目录更改为根目录即可

cd/

还有一种比较欺骗性的命令可以实现同样的功能

for /r %f in (*) do @echo %f

注意:如果在上述命令中遗漏了@echo部分,它将尝试执行目录中的所有文件,并且/r是使其递归查看子目录的关键。

将结果导出到文本文件

您还可以使用以下方法将列表导出到文本文件中

dir /b/s *.exe >> filelist.txt

并在其中搜索

type filelist.txt | find /n "filename"

如果你正在寻找具有特殊属性的文件,可以尝试

列出所有隐藏文件

dir /a:h-d /b/s

列出所有系统文件

dir /a:s-d /b/s

列出所有只读文件

dir /a:r-d /b/s

列出所有未索引的文件

dir /a:i-d /b/s

如果您从上面的所有命令中删除-d,它也会列出目录。


在Windows7+中使用where

尽管这个dir命令自从早期的DOS时代就存在了,但Win7添加了一个新功能叫做Where

where /r c:\Windows *.exe *.dll

将在驱动器 c:\Windows 中搜索 exedll,如 @SPottuit 所建议的,您还可以使用剪贴板复制输出

where /r c:\Windows *.exe |clip

只需等待提示返回,不要在此之前复制任何内容。

使用more进行分页

如果您正在递归搜索并且输出很大,您可以始终使用more启用分页,它将在底部显示-- More --,一旦您按下SPACE或按下ENTER逐行移动,它将滚动到下一页。

where /r c:\Windows *.exe |more

如需更多帮助,请尝试

where/?

5
你也可以用 | clip 替换 >> filelist.txt 来将列表导出到剪贴板。有关使用 | clip 的更多信息 - Sjoerd Pottuit
9
dir命令后添加/b参数,只会返回文件名或者文件路径(如果在多个文件夹中搜索),不会显示文件和文件夹的详细信息。在dir命令后添加/s参数,还会搜索子目录中的内容。更多有关dir命令的信息,请参阅此处 - Sjoerd Pottuit
2
不知道为什么这不是被接受的答案。包含了所有的东西和更多的内容。感谢您发布这个。希望我能投多次赞! - Avrohom Yisroel
1
人们可能只期望cd\或cd \可以切换到根目录,但在Windows 10上似乎cd/也能实现这一功能 - 不确定从哪个DOS / Windows版本开始这种情况成立。 - George Birbilis
2
@Vinod Srivastav,非常好。解释了所有可能的情况。 - Klanto Aguntuk
显示剩余5条评论

2

dir *.txt /s /p会提供更详细的信息。


该命令是用于在Windows操作系统中列出所有txt文件的命令,并且使用了/s和/p参数来显示子目录中的文件和逐页显示结果。

1
什么细节?/p将会暂停,与where /r c:\Windows *.exe /T |more相同。 - Vinod Srivastav

0

DIR 命令的问题在于它会返回错误的答案。 如果你想要在一个文件夹中查找 DOC 文件,使用 DIR *.DOC 命令也会返回 DOCX 文件。搜索 *.HTM 也会返回 HTML 等等...


7
为此,应该使用WHERE作为“Where /R c:\ *.DOC *.HTM”的用途。 - Vinod Srivastav
1
Vinod Srivastav。我现在尝试了一下,哇,这真是神奇的效果。 :) 我会将它应用到我的批处理中。 - Hobbe Lundahl

-1

你可以通过DOS和资源管理器GUI在Windows中进行搜索。

DOS:

1)DIR

2)ICACLS(搜索要设置ACL的文件和文件夹)

3)cacls..................................................

例如:

使用icacls c:*ntoskrnl*.* /grant system:(f) /c /t,然后使用来自Sysinternals的PMON监视被拒绝访问的文件夹。

结果包含:

访问路径包含您的驱动器

进程名称为explorer.exe

这些都是必须应用的过滤器。


请尝试改进您的答案。原始问题标记为 windowscmd,而不是 sysinternals/pmon。还有其他方法,比如在 C程序 中使用 FindFirstFileA 或在 c#程序 中使用 Directory.GetFiles,但它们超出了上下文。 - Vinod Srivastav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接