命令行搜索特定文件夹中的特定文件

命令行搜索特定文件夹中的特定文件

错误地首先将其放到 StackOverflow:

简单的文件搜索,但是却让我困惑。使用命令行,我可以使用以下命令搜索名为 jam 的目录:

dir /AD jam /S

我可以使用以下方法查找名为“三明治”的文件

dir /S *sandwiches* /B

有没有一种快捷方法可以组合这两个命令并查找名为“sandwiches”的文件,但只在名为“jam”的文件夹中?也就是说,无需将所有文件都传输到文本并筛选它们。

答案1

不,通过 Windows 安装提供的常规命令,这是不可能的(afak)。

该命令dir无法处理“正则表达式”(与 不同findstr)。因此,建议您将 的输出输入到dirfindstr以获取您的选择。

除非有先进的第三方dir命令可以处理类似于“正则表达式”的东西,否则这可能是显示感兴趣的文件的最简单的变体:

dir /B /S /A-D *sandwiches* | findstr -I ".*jam.*[\\]"

这将列出文件名中包含的所有文件,并在显示列表之前sandwiches丢弃不包含目录名的任何行。jam

不幸的是,在您的问题中,您排除了所需命令中使用管道的可能性,因此这可能是获取选择的最近/最短的可能性(由 Windows 提供的命令实现),但它不是您条件框架内的解决方案。

答案2

我知道问题是关于“正常”命令行/提示符。但是,您可以尝试使用 Powershell 来获得所需的结果:

Get-ChildItem -Directory "jam" | ForEach-Object { Get-ChildItem -Path $_ | Where-Object { $_.Name -like "*sandwiches*"} | Select-Object Name }

您可以将上述 cmdlet 缩短为:

gci -Directory "jam" | foreach { gci -Path $_ | ? { $_.Name -like "*sandwiches*"} | select Name }

答案3

你可以下载grep对于 Windows 并使用:

dir /s /b | grep -E "jam\\[^\\]*sandwiches[^\\]*"

匹配以 结尾的任何内容,然后匹配jam\除 之外的任何字符,然后匹配除 之外的任何字符\sandwiches\

这是一个比其他答案中管道更少的 PowerShell 解决方案:

Get-ChildItem -Recurse -Directory -Include "jam" | % { Get-ChildItem -Path $_ -Filter "*sandwiches*" -Name }

或者如果您想要完整路径,这更适合递归操作来知道文件在哪里:

Get-ChildItem -Recurse -Directory -Include "jam" | % { Get-ChildItem -Path $_ -Filter "*sandwiches*" | Select FullName }

您还可以通过管道将路径传输至Resolve-Path -Relative相对路径。

相关内容