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”附加到文件和文件夹的正确代码是什么?感谢您的任何想法!

编辑:我不认为我的问题与使用 PowerShell 重命名文件时,如何处理带有“[”的文件名?有两个原因:1-目标不同(只看标题);2-该线程没有为我提供代码来做我想做的事,即使它是一个很好的起点(这就是我在回答中链接到它的原因)。我的问题可能无关紧要,但我花了几个小时才弄清楚,所以也许我可以让某人免于几个小时的挫败感。但是我的问题表述得很糟糕,我现在将对其进行修改。

4

1 回答 1

0

我发现这是 Rename-Item cmdlet 3.0 之前的 Powershell 中的一个错误(请参阅:使用 PowerShell 重命名文件时,如何使用“[”处理文件名?)。我发现的唯一解决方法是改用 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') }

谁有更好的代码?否则我会将其标记为“已解决”。

于 2016-09-21T10:06:16.507 回答