的-Include参数从技术文档:困惑与Get-ChildItem cmdlet的
-Include
只检索指定项。 此参数的值符合 Path参数。输入路径 元素或模式,例如“* .txt”。 允许使用通配符。
include参数是有效的,只有当该命令 包括Recurse参数或 路径导致 目录的内容,如C:\视窗*,其中 通配符指定的所述 内容C:\ Windows目录。
我的第一个理解是:
c:\test\a.txt
c:\test\b.txt
因此,要获得 'A.TXT' 和 'b.txt' 我可以这样写:
gci -Path "c:\test\*" -Include "*.txt"
而这个工作。但现在考虑这样的层次:
c:\test\a.txt
c:\test\b.txt
c:\test\c.txt\c.txt
同样的命令返回: A.TXT,b.txt,c.txt
实际的逻辑似乎是:
-Include使用以匹配由-Path指定的所有实体。如果匹配元素 是一个文件 - 返回它。如果匹配 元素是一个文件夹,看看里面和 返回匹配的一级儿童。
同时,文档说:
include参数是有效的,只有当命令 包括Recurse参数或 路径导致 目录的内容...
这也是错误的。例如。
gci -Path "c:\test" -Include "*.txt"
它不返回任何内容,而不包含我包含的文件夹内容。所以 - 包括绝对是“有效的”。这里真的发生了什么? -Path指定“c:\ test”,并且-Include尝试匹配此路径。由于“* .txt”与“test”不匹配,所以没有返回。但是看看这个:
gci -Path "c:\test" -Include "*t"
它返回A.TXT,b.txt和c.txt为“* T”匹配“测试”和匹配的所有子项。毕竟,即使知道包括现在的作品,我也不知道何时使用它。为什么我需要它看到子文件夹内?为什么它应该如此复杂?
我正在使用PowerShell-v2.0-CTP3,并且您的示例会生成空集。 – alex2k8 2009-04-26 17:21:02
@ alex2k8,不知道该说些什么。我已经在1.0和2.0以后的版本中试过这个例子,两者都产生了相同的结果。 – JaredPar 2009-04-26 17:25:46
@Jared,这很奇怪。请你可以试试gci -path c:\ * -in *。我看到c:\的子项目,并且所有子文件夹都是一级的。这里是类似的描述http://www.eggheadcafe.com/software/aspnet/32624832/getchilditem-include-qu.aspx – alex2k8 2009-04-26 23:33:56