将“.backup”附加到 Powershell 2.0 中的所有文件、文件夹和子文件夹

Append ".backup" to all files, folders and subfolders in Powershell 2.0

我想使用 Powershell v2.0 将“.backup”附加到所有文件和文件夹名称(包括子文件夹和子文件夹中的文件)。

我想到了这个脚本:

$origin = get-childItem -recurse | ?{ !( $_.name -like "*.backup" ) } 
$folders = $origin | ?{ $_.PSIsContainer }
$files =  $origin | ?{ ! $_.PSIsContainer }
$files | rename-item -force -newname { $_.name + '.backup' }
$folders | rename-item -force -newname { $_.name + '.backup' }

但是很多项目我都收到这个错误,指出路径错误:

Rename-Item : Cannot rename because item at 'Microsoft.PowerShell.Core\FileSystem::E:\backup\test.backup\subfolder.backup\proc 1\backup\example.docx' does not exist.
At line:1 char:21
+ $files | rename-item <<<<  -force -newname { $_.name + '.backup' }
+ CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

但是这样的文件 (example.docx) 仍然存在于该路径中。

为什么会抛出该错误? PS 2.0 中将“.backup”附加到文件和文件夹的正确代码是什么?感谢您的任何想法!

编辑:我不认为我的问题与 When renaming a file with PowerShell, how do I handle filenames with "["? 重复,原因有二:1- 目标不同(只看标题); 2-那个线程没有提供代码来做我想做的事情,即使它是一个很好的起点(这就是为什么我在我的回答中链接到它)。我的问题可能无关紧要,但我花了几个小时才弄清楚,所以也许我可以让一些人免于沮丧。但是我的问题提得不好,我现在重做。

我发现这是 Rename-Item cmdlet 中 v.3.0 之前的 Powershell 中的错误(请参阅:When renaming a file with PowerShell, how do I handle filenames with "["?)。我发现的唯一解决方法是改用 Move-Item。

这是我想出的完整脚本:

$path = 'E:\backup'
$origin = get-childItem -path $path -recurse -exclude *.backup
$folders = $origin | ?{ $_.PSIsContainer }
$files =  $origin | ?{ ! $_.PSIsContainer }
$files | %{ move-item -force -literalpath $_.fullname -destination ($_.fullname + '.backup') }
$folders | sort-object -descending -property fullname | %{ move-item -force -literalpath $_.fullname -destination ($_.fullname + '.backup') }

谁有更好的代码?否则我会将其标记为 "solved".