鉴于Get-ChildItem -Path *.exe
将显示当前目录中的所有可执行文件,为什么Get-ChildItem -File -Include *.exe
不返回相同的结果?两个命令都在同一目录中执行,第一个命令(带-Path)返回可执行文件列表,但第二个命令(带-File)不返回。 (gci -File
将列出所有内容,包括exe)
Get-ChildItem -File | gm #=> FileInfo
Get-ChildItem *.* | gm #=> DirectoryInfo and FileInfo
所有命令都返回FileInfo类型的对象
Get-ChildItem -File
Get-ChildItem *.* -Include *.exe
Get-ChildItem -Path *.exe
但混合-File和-Include / -Exclude什么都不返回,即使-include正在查找文件类型:
Get-ChildItem -File -Include *.exe #=> Returns nothing
我在这里缺少什么?
答案 0 :(得分:0)
来自TechNet:
Include参数仅在命令包含时有效 Recurse参数或路径指向目录的内容, 例如C:\ Windows *,其中通配符指定了 C:\ Windows目录的内容。
换句话说,当您使用Include参数时,除非您使用Path或Recurse参数,否则它不会自动考虑所有文件和目录。请注意,仅使用Path参数时,必须包含通配符以强制它考虑该路径下的文件和目录结果。我想不出为什么会这样。
要使您的示例正常工作,您可以使用以下方法之一(我正在删除File参数,因为它似乎是多余的):
Get-ChildItem -Path * -Include *.exe
Get-ChildItem -Include *.exe -Recurse
我对你的问题的回答的主旨是一个观点 - 从我看到的应该删除Include参数 - 或者修改它的行为以匹配Get-ChildItem cmdlet在没有参数的情况下的默认行为。可能有一个很好的解释为什么它以这种方式工作,但我没有意识到这一点。
如果从示例中删除Include参数,行为/结果会更有意义(对我而言):
Get-ChildItem -Path *.exe
在这种情况下,我们只需要Exclude参数来有效地覆盖所有过滤要求。类似的东西:
Get-ChildItem -Path *.exe -Exclude *system*