使用“ -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 }
Run Code Online (Sandbox Code Playgroud)
我什么也没得到。我尝试使用和不使用“ -file”参数,都没有区别。
我看过各种指南/示例(ss64.com/TechNet等),并且据说我做得对。
有什么想法我可能做错了吗?谢谢!
在Get-Help
页面上Get-ChildItem
:
-Include
仅当命令包含-Recurse
参数或路径指向目录内容(例如)时,该参数才有效C:\Windows*
,其中“*
”通配符指定C:\Windows
目录的内容。
你会注意到,你没有,如果你指定出现语法错误-include
和不指定-recurse
尽管如此,无论它是从字面上未定义的事实。您还将注意到,这C:\Windows*
不是“目录中的所有文件”的普通通配符表达式C:\Windows
。它是“目录中所有以'Windows'开头C:\
且可能具有或不具有扩展名的项目”的通配符表达式。我不知道Get-ChildItem
该参数的作者应该怎么做。他们在记录和实施它方面做得非常差。
因此,我避免使用该-Include
参数损坏/记录不良的内容。我不知道该怎么办才-Filter
不会。我已经阅读了有关其确切功能的文章。它以某种方式“将值传递给基础提供程序以在该级别进行过滤”。我不知道为什么他们认为系统管理员会知道真正的含义。我的理解是,调用DirectoryInfo.GetFiles()
每个目录项和调用DirectoryInfo.GetFiles('*.txt')
每个目录项之间是有区别的,但是大多数系统管理员不会知道这意味着什么。但是,它的行为如此奇怪以至于我不信任它,因此即使我大约95%地确定它会做什么……我仍然从不使用它。
相反,我只是管道到Where-Object
:
Get-ChildItem -file | Where-Object Extension -eq '.txt' | [...]
Run Code Online (Sandbox Code Playgroud)
还要注意的是Get-ChildItem
与破-LiteralPath
,-Recurse
并-Include
在PowerShell中的一些版本,而会返回所有项目。
比较:
Get-ChildItem -LiteralPath $PSHOME *.exe -Recurse # works
Get-ChildItem -Path $PSHOME -Include *.exe -Recurse # works
Get-ChildItem -LiteralPath $PSHOME -Include *.exe -Recurse # does NOT work
Run Code Online (Sandbox Code Playgroud)
v6 在这里报告的问题。
归档时间: |
|
查看次数: |
308 次 |
最近记录: |