混淆了get-child Item cmdlet的-include参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

来自文件:

-只检索指定的项。此参数的值限定路径参数。输入路径元素或模式,如“*.txt“.通配符是允许的。仅当命令包含Recurse参数或路径导致目录的内容(如C:\windows)时,include参数才有效。*,其中通配符指定C:\windows目录的内容。

我的第一个理解是:

c:\test\a.txt
c:\test\b.txt

因此,要得到“.txt”和“b.txt”,我可以写:

gci -Path "c:\test\*" -Include "*.txt"

而且这个很管用。但现在考虑这样的等级制度:

c:\test\a.txt
c:\test\b.txt
c:\test\c.txt\c.txt

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

实际的逻辑似乎是:

-包含用于匹配由-path指定的所有实体。如果匹配元素是一个文件-返回它。如果匹配的元素是文件夹,请查看内部并返回匹配的第一级子元素。

此外,文件还说:

只有当命令包含Recurse参数或路径导致目录的内容时,include参数才有效.

这也是错误的。例如:

gci -Path "c:\test" -Include "*.txt"

它什么也不返回,而没有-包括我获得文件夹内容。所以-包括绝对是“有效”。这里到底发生了什么?-路径指定“c:\test”,-include试图匹配此路径。作为“*.txt“与”test“不匹配,因此没有返回任何内容。但是看看这个:

gci -Path "c:\test" -Include "*t"

它返回.txt、b.txt和c.txt作为“*T“匹配”测试和匹配所有子项。

毕竟,即使现在知道如何包含它,我也不知道什么时候使用它。为什么我需要它在子文件夹中查找?为什么要这么复杂?

提问于
用户回答回答于

我刚刚问了一个类似的问题,并得到了三个有关Get-ChildItem 的Get-Help的快速回复。

答案在于命令的完整描述(Get-Help Get-ChildItem -full): The Include parameter is effective only when the command includes the 递归参数或路径导致目录的内容,例如C:\ Windows *,其中通配符指定C:\ Windows目录的内容。 所以下面的工作将不会发生。 PS C:\ foo> Get-childitem -path“c:\ foo *”-Include * .txt

从堆栈溢出问题PowerShell脚本 - Get-ChildItem

用户回答回答于

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

你可以通过尝试以下方法来验证这一点

gci -path "c:\test" -in *e*

这仍然会产生目录中的所有子目录,但是它不匹配它们的名字。

使用Recurse参数-include更有效的原因是,你最终对层次结构中的每个路径应用了通配符。

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问9 回答
  • 优惠活动秘书

    0 粉丝2 提问8 回答
  • 最爱开车啦

    8 粉丝503 提问6 回答
  • 富有想象力的人

    3 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券