Windows10 / Powershell:如何在使用Get-Childitem时使用-include参数?

时间:2017-11-01 04:03:27

标签: powershell

使用“-filter”时:

Get-ChildItem -file -filter "*.txt" | foreach-object { write-host $_.FullName}

我得到了当前文件夹中的4个.txt文件列表。

我尝试使用“-include”

Get-ChildItem -file -include *.txt | foreach-object { write-host $_.FullName }
Get-ChildItem -file -include *txt | foreach-object { write-host $_.FullName }

我一无所获。我尝试使用和不使用“-file”参数,它没有任何区别。

我看了各种指南/示例(ss64.com/TechNet等),据说我做得对。

任何想法我可能做错了什么?谢谢!

enter image description here

2 个答案:

答案 0 :(得分:4)

Get-Help的{​​{1}}页面:

  

Get-ChildItem参数仅在命令包含-Include参数或路径指向目录内容时有效,例如-Recurse,其中" { {1}}"通配符指定C:\Windows*目录的内容。

如果您指定*并且未指定C:\Windows,则您不会收到语法错误无论它做什么都是字面上未定义的事实。您还会注意到-include不是" -recurse目录中的所有文件"的正常通配符表达式。它是"所有以' Windows'开头的项目的通配符表达式在C:\Windows*目录中,可能有也可能没有扩展名"。我不知道C:\Windows的作者认为这个参数应该做什么。他们在记录和实施它方面做得非常糟糕。

因此,我将C:\参数视为已损坏/记录错误。我不知道它应该做什么Get-ChildItem没有。我已经阅读了有关它的确切内容的文章。它将值传递给底层提供者以在该级别进行过滤&#34;以某种方式。我不知道为什么他们认为系统管理员会知道这意味着什么。我的理解是,在每个目录项上调用-Include和在每个目录项上调用-Filter之间的区别是,但大多数系统管理员都不知道这意味着什么。然而,它的表现非常奇怪,以至于我不相信它,所以尽管我对它的作用大约有95%的确定...我仍然从不使用它。< / p>

相反,我只是管道DirectoryInfo.GetFiles()

DirectoryInfo.GetFiles('*.txt')

另请注意,Where-Object在某些版本的PowerShell中被Get-ChildItem -file | Where-Object Extension -eq '.txt' | [...] Get-ChildItem-LiteralPath打破,而是会返回所有项目。

比较

-Recurse

针对v6报告了here的问题。

答案 1 :(得分:1)

这些对我来说没有递归:

Get-ChildItem -Path "C:\Users\Athom\Desktop\*.txt"


Get-ChildItem -Path ".\*.txt"

或者只需添加递归参数:

 Get-ChildItem -Include *.txt -Recurse