2015-04-03 49 views
0

由于Get-ChildItem -Path *.exe将显示当前目录中的所有可执行文件,为什么Get-ChildItem -File -Include *.exe不会返回相同的结果?两个命令都在同一个目录中执行,第一个命令(使用-Path)返回可执行文件的列表,但第二个命令(使用-File)不会。 (gci -File将列出一切,包括EXE)PowerShell 3.0中的相同命令的不同结果

Get-ChildItem -File | gm #=> FileInfo 
Get-ChildItem *.* | gm #=> DirectoryInfo and FileInfo 

所有命令波纹管返回类型的对象的FileInfo

Get-ChildItem -File 
Get-ChildItem *.* -Include *.exe 
Get-ChildItem -Path *.exe 

但混合 - 文件和-Include/-Exclude没有返回,即使-include正在寻找一个文件类型:

Get-ChildItem -File -Include *.exe #=> Returns nothing 

我在这里错过了什么?

+0

亚历山大你肯定有路你查询exe文件的任何exe文件,你考'GCI型滤波器-include的* .exe -Recurse'是寻找exe文件中的所有目录和子目录 – powershell 2015-04-03 13:23:35

+0

是的,我有道路上的exe。 gci -Path * .exe返回它们的列表。运行gci -File -Recurse -Include * .exe也是如此,但它也包含子目录中的所有exes – 2015-04-03 14:34:17

回答

0

来自的TechNet:

的包括仅当该命令包含 Recurse参数或路径导致目录的内容,如C,使得 参数是有效的:\视窗*,其中通配符字符指定C:\ Windows目录中的 内容。

换句话说,使用Include参数时,除非使用Path或Recurse参数,否则它不会自动考虑所有文件和目录。请注意,仅使用Path参数时,必须包含通配符以强制它考虑该路径下的文件和目录结果。我想不出为什么会这样。

为了让您的例子来工作,你会用下列之一(我丢弃文件参数,因为它似乎是多余的):

Get-ChildItem -Path * -Include *.exe 
Get-ChildItem -Include *.exe -Recurse 

我的回答你的问题的要点是意见tho - 从我所看到的Include参数应该被删除 - 或者它的行为被修复以匹配Get-ChildItem cmdlet在没有参数的情况下的默认行为。为什么它会以这种方式工作,可能有一个很好的解释,但我不知道这一点。

如果你把从你的例子包括参数,行为/结果更有意义(我):

Get-ChildItem -Path *.exe 

在这种情况下,我们只需要排除参数来有效地覆盖所有的滤波要求。喜欢的东西:

Get-ChildItem -Path *.exe -Exclude *system* 
相关问题