2016-11-04 70 views
2

我已經從我的FTP服務器使用wget,並迫使ASCII編碼所以現在我的hve大量的文件夾和文件名類似「FOO%C3 BC%」下載了一個目錄樹(某些文件/文件夾已經有正確的名稱,因爲它們只有ASCII字符)。PowerShell的遞歸文件名讀取和重新命名

我現在想toconvert他們回UTF-8使用PowerShell,我試着寫以下行來完成這個

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

但這不是工作,使我有以下錯誤

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 

一遍又一遍(我想每找到一個文件一次)。

命令的工作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} 

} 

的這樣做,如果它只是aoid PowerShell的每一個發現,這並不需要轉換的名稱時拋出erorr。

+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管道中的下一個stago。現在我又遇到了另一個問題,它告訴我'不存在時不能創建文件'。你有什麼想法,我可以使它工作? –

+1

不,所有來自父管道的屬性都可以一路訪問。 –

+0

使用a-Force;香港專業教育學院編輯我aboe片段顯示 –