Powershell递归文件名读取并重命名

约翰·杜

我已经从ftp服务器上下载了使用wget并强制使用ascii编码的目录树,因此现在我拥有很多文件夹和文件名,例如“ foo%C3%BC”(某些文件/文件夹已经具有正确的名称,因为它们仅带有ascii字符)。

我现在正尝试使用powershell将其转换回utf-8,我尝试编写以下行来完成此操作

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

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

在“选择BaseName”之后,该命令一直有效地运行到管道,因此问题出在重命名部分中。

有谁知道如何使它工作?

约翰·杜

Kinda很晚,但我想为可能遇到此问题的人发布答案(我只是记得我在找到答案后就发布了答案)

以下代码片段正是我所需要的

Add-Type -AssemblyName System.Web;

# Get the filenames and order them to have the files first, this avoids problems when renaming them
$data =  get-childitem C:\Users\Administrator\Desktop\folder -recurse | Sort-Object FullName -descending;

# Cycle every file
ForEach($dat in $data){

     # Get the decoded UTF-8 name
     $decoded = [System.Web.HttpUtility]::UrlDecode($dat.name);

     # Rename the file if the decoded name is different than the current one
     if ($dat.name -ne $decoded){ren $dat.FullName $decoded}

}

我最初使用的方法的问题在于,文件夹在包含其中的文件之前已被重命名,这意味着单个文件的路径不再正确。我通过按降序对路径列表进行排序来解决该问题,以便首先对单个文件进行重命名,并添加了仅在文件名称由于编码而更改时才对文件进行重命名的检查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

剥离文件名并重命名

来自分类Dev

在 PowerShell 中重命名文件名

来自分类Dev

计算文件名的字符并重命名

来自分类Dev

PowerShell重命名多个文件,文件名的特定部分

来自分类Dev

使用PowerShell重命名或删除文件名中的字符

来自分类Dev

PowerShell - 重命名对象数组中的重复文件名

来自分类Dev

批处理文件获取文件名并重命名

来自分类Dev

当源文件名包含嵌入空格时,如何快速复制文件并重命名

来自分类Dev

Bash命令可以在多个目录中复制并重命名相同的文件名?

来自分类Dev

复制图像并重命名以匹配其他文件名

来自分类Dev

批处理文件重命名,从txt文件读取旧文件名和新文件名

来自分类Dev

读取多个CSV文件,然后根据文件名重命名文件

来自分类Dev

Bash oneliner重命名文件名

来自分类Dev

重命名现有文件名

来自分类Dev

Excel VBA重命名文件名

来自分类Dev

如何重命名(太长)文件名

来自分类Dev

重命名上载的文件名,JSP

来自分类Dev

重命名现有文件名

来自分类Dev

Bash:重命名文件名开头

来自分类Dev

为重命名清理文件名

来自分类Dev

重命名文件名python

来自分类Dev

PowerShell批量替换特定字符并重命名文件扩展名

来自分类Dev

批量重命名,添加额外的“。” 递归地位于文件名中位置3处的字符

来自分类Dev

如何从列表中递归重命名一部分文件名?

来自分类Dev

使用重命名递归替换文件名(而不是目录)中无效字符的脚本

来自分类Dev

使用Powershell递归重命名文件

来自分类Dev

递归重命名文件扩展名

来自分类Dev

在 PowerShell 4.0 中使用文件名重命名文件夹

来自分类Dev

如何使用匹配的字符串递归重命名文件夹名和文件名

Related 相关文章

热门标签

归档