使用powershell将字符添加到文件名的基础

时间:2016-04-29 11:25:38

标签: powershell

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),但没有文件更改。 我想感谢有人在这里提供初步帮助。

3 个答案:

答案 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}

由于dirGet-ChildItem的较短别名,因此过滤器可以作为参数直接传递,当前目录是假定路径。对于我们这些老人来说,它也比原来的DOS更接近模拟。