2016-09-21 22 views
0

我想使用Powershell v2.0将“.backup”附加到所有文件和文件夹名称(包括子文件夹中的子文件夹和文件)。将“.backup”附加到Powershell 2.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)存在于尽管如此。

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

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

+0

可能的重复[当使用PowerShell重命名文件时,如何处理文件名为“\ [”?](http://stackoverflow.com/questions/14259317/when-renaming-a-file-with-powershell - 如何-DO-I-手柄文件名,有) –

回答

0

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

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

相关问题