PowerShell的递归文件名读取和重新命名
我已经从我的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到管道后“选择基本名称”,所以这个问题是在重命名部分。
有没有人有任何想法如何使它工作?
我设法与下面的脚本
$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。
[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
}
哦,好的,希望'Select BaseName'有必要将它传递给hte管道中的下一个stago。现在我又遇到了另一个问题,它告诉我'不存在时不能创建文件'。你有什么想法,我可以使它工作? –
不,所有来自父管道的属性都可以一路访问。 –
使用a-Force;香港专业教育学院编辑我aboe片段显示 –
@Josh Lavely感谢您的帮助:) –