使用“-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等),据说我做得对。
任何想法我可能做错了什么?谢谢!
答案 0 :(得分:4)
Get-Help
的{{1}}页面:
Get-ChildItem
参数仅在命令包含-Include
参数或路径指向目录内容时有效,例如-Recurse
,其中" { {1}}"通配符指定C:\Windows*
目录的内容。
如果您指定*
并且未指定C:\Windows
,则您不会收到语法错误无论它做什么都是字面上未定义的事实。您还会注意到-include
不是" -recurse
目录中的所有文件"的正常通配符表达式。它是"所有以' Windows'开头的项目的通配符表达式在C:\Windows*
目录中,可能有也可能没有扩展名"。我不知道C:\Windows
的作者认为这个参数应该做什么。他们在记录和实施它方面做得非常糟糕。
因此,我将C:\
参数视为已损坏/记录错误。我不知道它应该做什么Get-ChildItem
没有。我已经阅读了有关它的确切内容的文章。它将值传递给底层提供者以在该级别进行过滤"以某种方式。我不知道为什么他们认为系统管理员会知道这意味着什么。我的理解是,在每个目录项上调用-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