首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Get-ChildItem cmdlet的-Include参数混淆

与Get-ChildItem cmdlet的-Include参数混淆
EN

Stack Overflow用户
提问于 2009-04-26 12:45:47
回答 6查看 19.4K关注 0票数 12

来自文档:

-Include

仅检索指定的项。此参数的值限定Path参数。输入路径元素或模式,例如"*.txt“。允许使用通配符。

仅当命令包含Recurse参数或路径指向目录的内容(如C:\Windows*,其中通配符指定C:\Windows目录的内容)时,Include参数才有效。

我的第一个理解是:

代码语言:javascript
复制
c:\test\a.txt
c:\test\b.txt

因此,要获得'a.txt‘和'b.txt’,我可以这样写:

代码语言:javascript
复制
gci -Path "c:\test\*" -Include "*.txt"

这是可行的。但现在考虑这样的层次结构:

代码语言:javascript
复制
c:\test\a.txt
c:\test\b.txt
c:\test\c.txt\c.txt

相同的命令返回: a.txt、b.txt、c.txt

实际的逻辑似乎是:

用于匹配-Path指定的所有实体的

-Include。如果匹配的元素是一个文件-返回它。如果匹配的元素是一个文件夹,则查看内部并返回匹配的第一级子元素。

此外,文档还说:

包含参数仅在命令包含

参数或路径指向目录内容时有效...

这也是错误的。例如。

代码语言:javascript
复制
gci -Path "c:\test" -Include "*.txt"

它不返回任何内容,而如果没有-Include,我将获得文件夹内容。所以-Include绝对是“有效的”。这里到底发生了什么?测试指定“c:\ -Path”,-Include尝试匹配此路径。由于"*.txt“与"test”不匹配,因此没有返回任何内容。但看看这个:

代码语言:javascript
复制
gci -Path "c:\test" -Include "*t"

它返回a.txt、b.txt和c.txt作为匹配"*t“的测试,并匹配所有子项。

毕竟,即使现在知道了Include是如何工作的,我也不知道什么时候使用它。为什么我需要它在子文件夹中查找?为什么要这么复杂呢?

EN

回答 6

Stack Overflow用户

发布于 2009-04-26 14:05:44

您混淆了-include的用法。-include标志应用于路径,而不是路径的内容。如果不使用递归标志,唯一有问题的路径就是您指定的路径。这就是为什么你给的最后一个例子有效,路径c:\test在路径中有一个t,因此与"*t"匹配。

您可以尝试执行以下操作来验证这一点

代码语言:javascript
复制
gci -path "c:\test" -in *e*

这仍然会生成目录中的所有子目录,但它不会匹配它们的任何名称。

-include使用递归参数更有效的原因是,您最终会对层次结构中的每条路径应用通配符。

票数 15
EN

Stack Overflow用户

发布于 2009-04-26 16:57:23

尝试-filter参数(它只支持一个扩展):

目录-filter *.txt

票数 9
EN

Stack Overflow用户

发布于 2009-04-26 14:22:16

JaredPar's answer上,为了使用Get-ChildItem进行模式匹配,您可以使用通用的外壳通配符。

例如:

代码语言:javascript
复制
get-childitem "c:\test\t?st.txt"

"?“在哪里?是与任何一个字符匹配的通配符,或者

代码语言:javascript
复制
get-childitem "c:\test\*.txt"

它将匹配任何以".txt“结尾的文件名。

这应该会让你得到你想要的“更简单”的行为。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/790796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档