2016-11-04 106 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片段显示 –

相关问题