编辑希望在这里澄清我令人费解和误导性的问题......基于我错误的假设 -file 接受输入。感谢您直截了当地指出这只是一个开关参数;我的示例中的输入实际上被传递给 -path。听起来这可能是搜索多种文件类型的最快的纯 powershell 方法,因为 -filter 只接受单个输入,而 -include 速度较慢。
get-childItem文档说“过滤器比其他参数更有效,因为提供程序在检索对象时应用它们,而不是让 Windows PowerShell 在检索对象后对其进行过滤。”
v3 有一个带有 -file 参数的新参数集,可能是为了排除目录,以匹配 cmd.exe 的dir /a:-d
与 -include 一样,与 -filter 不同,-file 接受多个,如gci -file "*.ldf","*.bak"
所以我想知道,并且迄今为止未能可靠地测试,如果 -file 从性能角度来看就像 -filter,即“更有效”,或者更像是像 -include 这样的“其他参数”。如果 -file 是一个过滤器,那很好,因为 afaict -filter 一次只处理一个过滤器,所以如果您想要多个过滤器(如 *.ldf 和 *.bak),那么您需要运行gci -filter
两次或使用 -include 代替。所以我想知道 -file 是否可以让我们为多个过滤器获得过滤器的效率优势。
我偶然发现了一些让我乐观的错误文本。-file 参数希望 -path 成为当前目录,因此gci -path $path -file "*.bak","*.ldf"
会出错。Push-location 似乎是一种可行的解决方法,但在这里我对错误文本的内容更感兴趣:
Get-ChildItem:无法将“System.Object[]”转换为参数“Filter”所需的类型“System.String”。不支持指定的方法。
我调用了-file,但错误抱怨“参数'过滤器'”。所以也许 -file 像过滤器一样有效?OTOH,-filter 不需要 -path 是当前目录,因此在这方面 -file 更像 -include。