批量重命名脚本需求:还原URL编码的文件及文件夹名称
递归还原URL编码的文件/文件夹名称
PowerShell 脚本方案(推荐,更简单可靠)
这个脚本会递归遍历指定目录(默认是脚本所在目录),将所有文件和文件夹名称中的URL编码(比如%20转空格、%28转(、%29转)等)还原成正常字符。
脚本代码
# 获取脚本所在目录,也可以手动指定路径,比如 $targetDir = "D:\你的文件夹路径" $targetDir = $PSScriptRoot # 先处理深层子文件夹(避免路径变化影响后续操作) Get-ChildItem -Path $targetDir -Directory -Recurse | Sort-Object -Property FullName -Descending | ForEach-Object { try { # 解码文件夹名称 $decodedName = [Uri]::UnescapeDataString($_.Name) if ($decodedName -ne $_.Name) { $newPath = Join-Path -Path $_.Parent.FullName -ChildPath $decodedName Rename-Item -Path $_.FullName -Destination $newPath -ErrorAction Stop Write-Host "已还原文件夹:$($_.FullName) → $newPath" } } catch { Write-Warning "无法还原文件夹 $($_.FullName):$_" } } # 再处理所有文件 Get-ChildItem -Path $targetDir -File -Recurse | ForEach-Object { try { # 解码文件名称 $decodedName = [Uri]::UnescapeDataString($_.Name) if ($decodedName -ne $_.Name) { $newPath = Join-Path -Path $_.Directory.FullName -ChildPath $decodedName Rename-Item -Path $_.FullName -Destination $newPath -ErrorAction Stop Write-Host "已还原文件:$($_.FullName) → $newPath" } } catch { Write-Warning "无法还原文件 $($_.FullName):$_" } } Write-Host "所有可处理的文件/文件夹已完成还原"
使用方法
- 打开记事本,复制上面的代码粘贴进去。
- 若需处理指定文件夹,把第一行的
$targetDir = $PSScriptRoot改成$targetDir = "你的文件夹完整路径",比如$targetDir = "D:\下载\解压后的文件夹"。 - 点击记事本左上角「文件」→「另存为」,保存类型选「所有文件」,文件名设为
还原编码名称.ps1,保存到方便找到的位置。 - 右键点击这个
.ps1文件,选择「用PowerShell运行」即可。
Batch 脚本方案(纯命令行,无需额外环境)
这个批处理脚本会递归处理指定目录(默认是脚本所在目录),还原常见的URL编码字符:%20→空格、%28→(、%29→)、%2C→,、%2F→/、%3A→:、%3F→?。
脚本代码
@echo off setlocal enabledelayedexpansion :: 设置要处理的目标目录,默认是脚本所在目录,可手动修改,比如 set "targetDir=D:\你的文件夹路径" set "targetDir=%~dp0" :: 先递归处理所有子文件夹(从最深层开始,避免路径失效) for /r "%targetDir%" /d %%d in (*) do ( call :decodeName "%%~nxd" "%%~dpd" ) :: 再递归处理所有文件 for /r "%targetDir%" %%f in (*) do ( call :decodeName "%%~nxf" "%%~dpf" ) echo 所有可处理的文件/文件夹已完成还原 pause exit /b :: 解码名称的函数 :decodeName set "oldName=%~1" set "newName=%oldName%" :: 替换常见的URL编码字符 set "newName=!newName:%20= !" set "newName=!newName:%28=(!" set "newName=!newName:%29=)!" set "newName=!newName:%2C=,!" set "newName=!newName:%2F=/!" set "newName=!newName:%3A=:!" set "newName=!newName:%3F=?!" :: 如果名称有变化,执行重命名 if not "!newName!"=="!oldName!" ( ren "%~2!oldName!" "!newName!" echo 已还原:"%~2!oldName!" → "%~2!newName!" ) exit /b
使用方法
- 打开记事本,复制上面的代码粘贴进去。
- 要处理指定文件夹的话,把
set "targetDir=%~dp0"改成set "targetDir=你的文件夹完整路径",比如set "targetDir=D:\下载\解压后的文件夹"。 - 点击「文件」→「另存为」,保存类型选「所有文件」,文件名设为
还原编码名称.bat,保存后双击运行即可。
内容的提问来源于stack exchange,提问作者Jude Reyes
相关产品推荐
相关产品推荐

