使用foreach循环在powershell中批量重命名文件

时间:2014-08-12 15:42:27

标签: powershell

$folderpath = 'E:\BOOKS\Python\python\python'
$items = Get-ChildItem -Recurse $folderpathc *_pdf
foreach( $i in $items) { Rename-Item E:\BOOKS\Python\python\python\$i E:\BOOKS\Python\python\python\$i.pdf }

嗨,我尝试使用上面的命令在文件夹下重命名该文件,但是无法做到并且得到以下错误。

Rename-Item : Cannot rename because item at 'E:\BOOKS\Python\python\python\book_pdf' does not exist.
At line:1 char:37
+ foreach( $i in $items) { Rename-Item <<<<  E:\BOOKS\Python\python\python\$i E:\BOOKS\Python\python\python\$i.pdf }
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

2 个答案:

答案 0 :(得分:3)

您希望将所有'_pdf'更改为'.pdf',如果是这样,这是一种非常简单的方法。

ls -Path 'E:\BOOKS\Python\python\python' -Filter *_pdf | 
  ForEach-Object {$_ | Rename-Item -NewName $_.Name.Replace('_pdf', '.pdf')}

答案 1 :(得分:0)

你过度复杂化了。不要重新键入文件的路径名,请使用Get-ChildItem cmdlet已提供的FullName属性。然后只需使用BaseName属性的子字符串删除最后4个字符,并添加&#34; .pdf&#34;到最后。

$folderpath = 'E:\BOOKS\Python\python\python'
$items = Get-ChildItem -Recurse $folderpathc *_pdf
foreach( $i in $items) { 
    Rename-Item $i.FullName ($i.basename.substring(0,$i.BaseName.length-4)+".pdf")
}