Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "wpd" -Recurse | rename-item -NewName {$_.name-replace '.wpd', -2015.wpd'}
PS C:\WPDOCS-aa\0000-wpdocs 2015> Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "wpd" -Recurse | rename-item -NewName {$_.name-replace '.wpd', -2015.wpd'}
我已经尝试了上面的内容,它只是挂起。 我试过这个:
Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "wpd" -Recurse | rename-item -NewName {"$($_.BaseName) -2015.wpd"}
似乎完成了(带有W10 Pro的Powershell v5),但没有文件更改。 我想感谢有人在这里提供初步帮助。
答案 0 :(得分:2)
您的方法存在两个问题。
1)-Filter无法获取您想要的文件,因为您正在寻找字面上称为" wpd"的文件。如果您只提供部分文件名,则需要使用通配符。因为听起来你正在寻找专门使用.wpd扩展名的文件,所以它会是这样的:
Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "*.wpd" -Recurse
2)要访问$_
管道变量,首先需要将Rename-Item包装在Foreach-Object cmdlet中。
Foreach-Object {Rename-Item -Path $_.Fullname -NewName "$($_.BaseName) -2015.wpd"}
另一个小小的注意事项是,如果您不对.wpd扩展名进行硬编码,则可以使cmdlet更具可重用性。我会更像这样的-NewName参数:
-NewName ($_.BaseName + " -2015" + $_.Extension)
这样,如果您想将其与其他文件类型一起使用,您需要更改的只是过滤器部分。
所以整个事情都放在一起:
Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "*.wpd" -Recurse | Foreach-Object {Rename-Item -Path $_.Fullname -NewName ($_.BaseName + " -2015" + $_.Extension)}
答案 1 :(得分:0)
先备份你的文件,然后试试这个:
Get-ChildItem -Path "C:\WPDOCS-aa\0000-wpdocs 2015" -Filter "*.wpd" -Recurse | % { rename-item -Path $_.FullName -NewName "$($_.BaseName)-2015.wpd" }
答案 2 :(得分:0)
我认为执行以下操作会更简单一些:
dir *.wpd | rename-item -NewName {$_.BaseName + "-2015" + $_.Extension}
由于dir
是Get-ChildItem
的较短别名,因此过滤器可以作为参数直接传递,当前目录是假定路径。对于我们这些老人来说,它也比原来的DOS更接近模拟。