0

我使用findstr递归搜索几个大目录以查找与 searchList.txt 中的任何行匹配的任何行。

findstr /SNIP /D:"C:\search Dir1;C:\search Dir2" /G:C:\searchList.txt *

我想在 Powershell 脚本中做同样的事情,要么通过调用findstr命令,要么完全在 Powershell 中做某事。遍历 searchList.txt 中的每个项目,然后查看所有目录太慢了。

如何在 Powershell 中调用上述行,或执行等效操作?

提前致谢。

4

1 回答 1

2

您可以在 PowerShell 中调用它,方法是打开一个 PowerShell 提示符,输入它,然后点击[ENTER]

我没有看到任何阻止您从 PowerShell 运行该命令的东西。findstr不是本机 cmd 命令,它是与 Windows 捆绑在一起的独立 .exe 文件,位于默认系统路径(System32 目录)中,因此可从 PowerShell 获得。

您可以在本机 PowerShell 中执行此操作,但这将是一个不必要的头痛。你必须做这样的事情

echo 'C:\search Dir1' 'C:\search Dir2' | Get-ChildItem | Select-String ((Get-Content C:\searchlist.txt) -join '|')

但是排除二进制文件会很痛苦,因为AFAIK没有内置的方法来检查文件是文本还是二进制文件。如果您可以依赖扩展名,则可以-Filter *.txtGet-ChildItem.

底线:这不值得。Select-String在匹配模式方面更加通用,因为您可以使用 .NET 正则表达式,但如果您要查找的模式在findstr的有限正则表达式功能范围内,则最好使用findstr来完成此任务,并且您的脚本将是可移植的,因为它始终包含在 Windows 中。

于 2013-10-25T22:27:59.683 回答