2016-09-21 5 views
0

Powershell v2.0を使用して、すべてのファイルとフォルダ名(サブフォルダとサブフォルダ内のファイルを含む)に「.backup」を追加します。Powershell 2.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」を追加するための正しいコードは何ですか?アイデアありがとう!

編集:私の質問は2つの理由で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)でファイル名を処理するにはどうすればいいですか? -how-do-i-handle-filenames-with) –

答えて

0

Rename-Itemコマンドレットのバージョン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') } 

誰もがより良いコードを持っています

ここに私が思い付いた完全なスクリプトがですか?さもなければ私はそれを "解決された"とマークします。

関連する問題