2016-09-21 7 views
0

Я хочу добавить «.backup» ко всем именам файлов и папок (включая подпапки и файлы в подпапках) с помощью Powershell v2.0.Добавить «.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) существует в этот путь, тем не менее.

Почему эта ошибка возникает? И каков правильный код для добавления «.backup» к файлам и папкам в PS 2.0? Спасибо за любые идеи!

EDIT: Я не думаю, что мой вопрос является дубликатом 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

Я узнал, что это ошибка в Powershell до версии 3.0 в командлете Rename-Item (см.: 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') } 

Каждый имеет лучший код? В противном случае я буду отмечать его как «решаемый».