追加" .backup"到Powershell 2.0中的所有文件,文件夹和子文件夹

时间:2016-09-21 07:16:48

标签: powershell-v2.0 rename-item-cmdlet

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

我想出了这个剧本:

$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)仍然存在于该路径中。

为什么会抛出这个错误?什么是正确的附加&#39; .backup&#39;到PS 2.0中的文件和文件夹?谢谢你的任何想法!

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

1 个答案:

答案 0 :(得分:0)

我发现它是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') }

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