我使用以下管道选择特定文件夹:
gci -path * | ? { $_.PsIsContainer -and $_.Fullname -notmatch '_' }
上面给出了我的名字中没有下划线的文件夹,这就是我想要的,到目前为止一切都很好。
但是当我将结果传递给另一个Get-ChildItem
时,我得到一个 BindingException 错误:
gci -path * | ? { $_.PsIsContainer -and $_.Fullname -notmatch '_' } | gci *.pdf
gci:输入对象无法绑定到命令的任何参数,因为该命令不执行 管道输入或输入及其属性与管道输入的任何参数都不匹配。
+ CategoryInfo:InvalidArgument :( Book Folder B:PSObject)[Get-ChildItem],ParameterBindingException
+ FullyQualifiedErrorId:InputObjectNotBound,Microsoft.PowerShell.Commands.GetChildItemCommand
如何处理上述管道输出的每个文件夹中的文件。例如,如果文件具有pdf
扩展名,我想为其调用Move-Item
命令。
答案 0 :(得分:2)
更改最后一个管道对象
来自plt.show()
至gci *.pdf
但我建议您使用以下内容优化现有总线:
Get-childitem -Filter *.pdf
答案 1 :(得分:1)
以下代码段输出当前文件夹中 一个级别 下所有.pdf
个文件的完全限定名称,这些文件在完整路径。 (输出文件名可以包含下划线)。
Get-ChildItem -Path . |
Where-Object { $_.PsIsContainer -and $_.Fullname -notmatch '_' } |
Get-ChildItem -Filter *.pdf |
ForEach-Object {
<# do anything with every file object instead of just outputting its FullName <##>
$_.FullName
}
您需要在第二个-Filter
中使用gci
关键字,其允许位置 2 (请注意, 1 位置是专用的对于-Path
参数)。
有关进一步说明和潜在改进/优化的信息,请阅读Get-ChildItem
以及Get-ChildItem
for FileSystem。