如何使用 OR/NOT 条件在目录中搜索文件?

如何使用 OR/NOT 条件在目录中搜索文件?

我可以plus使用以下命令在目录中搜索包含该术语的文件:

dir "*plus*" /s

但是,我需要修改命令以搜索名称包含术语的文件plus OR vest。在 Windows 资源管理器中,我可以通过输入以OR-连接的搜索词来执行此操作plus OR vest。如何使用 Windows 命令行完成此操作?

答案1

dir接收模式列表所以你可以使用多个通配符模式

dir /s *plus* *vest*

你可能想要使用dir /b /s *plus* *vest*更合理的输出


或者你也可以使用以下方法过滤结果findstr

dir /b /s | findstr /i "plus vest"

findstr默认会查找以空格分隔的单词,并返回匹配的行plus,或vest./i用于不区分大小写地匹配,如果您不需要,可以将其删除。但这种方法将是慢得多因为所有文件路径都必须打印到管道

请注意,这还将查找名为*plus*或 的文件夹中的所有文件*vest*。您可以删除/b,但 的输出dir /b /s | findstr /i "plus vest"会非常混乱,因为您不知道文件位于哪个文件夹中


查找(plusvest)但不hoodie使用

dir /b /s *plus* *vest* | findstr /i /v hoodie

但这也会排除名为 的文件夹中的文件*hoodie*。再次删除/b有帮助,但输出可能无用。对于如此复杂的事情,您应该改用 PowerShell。事实上,我避免在 cmd 中编写任何新内容,PowerShell 明显更好,您不必学习 cmd 的遗留怪癖。在 PowerShell 中,可以这样做

Get-ChildItem -Recurse -Include "*plus*", "*vest*" | Where-Object { $_.Name -notlike "*hoodie*" }

或者更短的别名版本:

ls -R -I "*plus*", "*vest*" | where { $_.Name -notlike "*hoodie*" }

答案2

使用 Powershell,您可以使用以下命令:

Get-ChildItem -Path "C:\Path\To\Your\Files\*" -Include "*plus*", "*vest*"

如果您已经在路径中:

Get-ChildItem -Path .\* -Include "*plus*", "*vest*"

相关内容