2016-11-04 24 views
2

wgetを使用してディレクトリツリーをダウンロードしてasciiエンコーディングを行ったので、 "foo%C3%BC" /フォルダーにはASCII文字しかないので、すでに正しい名前が付けられています)。Powershell再帰的なファイル名の読み込みと名前変更

は、私は今、私はこの

Get-ChildItem C:\Users\Administrator\Desktop\folder -Recurse | select BaseName | Rename-Item -NewName {[System.Web.HttpUtility]::UrlDecode{BaseName}} 

を達成するために以下の行を書いてみました、PowerShellを使用してUTF-8に戻してtoconvertしようとしているが、これは動作していないと私は次のエラーを与える

Rename-Item : Cannot rename because item at '@{BaseName=filename}' does not exist. 
At line:1 char:88 
+ ... ect BaseName | Rename-Item -NewName {[System.Web.HttpUtility]::UrlDecode{BaseNam ... 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException 
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand 

何度も繰り返します(見つかったファイルごとに1回とします)。

このコマンドは、 "select BaseName"の後にパイプまでniecly動作しますので、名前変更の部分に問題があります。

どのように動作させるか考えている人はいますか?

答えて

0

私は以下のスクリプト

$data = get-childitem C:\Users\Administrator\Desktop\folder -recurse | Sort-Object FullName -descending; 

ForEach($dat in $data){ 

    $decoded = [System.Web.HttpUtility]::UrlDecode($dat.name); 

    if ($dat.name -ne $decoded){ren $dat.FullName $decoded} 

} 

それはerorrにそれが変換を必要としない名前を見つけるたびに投げPowerShellをaoidするだけかどうザ・でそれを行うことができました。

+0

@Josh Lavelyありがとうございました:) –

1
[Reflection.Assembly]::loadWithPartialName("System.Web") | out-null 
    $data = Get-ChildItem C:\Users\Administrator\Desktop\folder -Recurse 
    ForEach($dat in $data){ 
    $newName = [System.Web.HttpUtility]::UrlDecode($dat.Name); 
    $dat | Rename-Item -NewName $newName -Force 
} 
+0

これは、Select BaseNameがhteパイプラインの次の詰まりに渡すために必要だったことを知りました。今私は別の問題があります。それは、 'すでに存在するときにファイルを作成できません。どのように私はそれを動作させることができますか考えてもらえますか? –

+1

いいえ、親パイプラインのすべてのプロパティにアクセスできます。 –

+0

-Forceを使用します。私のaboeスニペットを編集しました –

関連する問題