【问题标题】:Get-ChildItem Doesn't Work With IncludeGet-ChildItem 不适用于包含
【发布时间】:2017-01-18 02:09:14
【问题描述】:

我正在关注的示例:

Get-ChildItem c:\scripts\*.* -include *.txt,*.log

https://technet.microsoft.com/en-us/library/ee176841.aspx

什么给了?为什么我在尝试使用 include 时没有返回我的 test.txt 文件列表?

作为旁注,c:\scripts\*.* 是什么。似乎是在说包含具有任何格式的任何名称的文件。但这不是在包含中指定的吗?无论如何,更感兴趣的是为什么我看似基本的代码不起作用。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    来自the help file (Get-Help Get-ChildItem)

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

    Get-ChildItem c:\pstest\*.* -include *.txt
    

    Get-ChildItem c:\pstest -recurse -include *.txt
    

    或者更好:使用-Filter 参数而不是-Include

    Get-ChildItem C:\pstest -Filter *.txt
    

    【讨论】:

    • 谢谢你,这两项工作,但是当我已经在pstest(或任何目录)中寻找过滤文件时,我没有遵循为什么需要“*.*”,这似乎是多余的(虽然我确信我错过了一些东西)。
    • @VSO 在这种情况下你应该使用-Filter,而不是-Include(见更新)
    • 好的,谢谢,我看看两者的区别。
    • 这完全坏了。从字面上调用“*”(即当前目录)上的 Get-ChildItem 并且 -Include 模式不匹配。更糟糕的是,-Exclude 模式也不匹配。它只是行不通。使用 -Recurse 也不起作用,甚至使用它也没有意义,因为我不想递归......实际上只是试图获取当前目录的 Get-ChildItem(s)。 -Filter 不是一种解决方法,因为我需要包含一个模式同时排除另一个模式。它只是不起作用。
    • “使用 Get-ChildItem 实现 -Include / -Exclude 不直观且存在缺陷”。不开玩笑。 stackoverflow.com/a/38308796/88409
    【解决方案2】:

    你也可以这样做:

    Get-ChildItem "C:\pstest\*.txt"
    

    如果您想创建更精细的过滤器:

    Get-ChildItem "C:\pstest\" -recurse -file | where {$_.Name -like "*hello*" -and $_.Name -notlike "*good by*"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多