如何在Windows中从含%2f/%2F的文件名创建目录并批量处理文件
解决Gist解压后URL编码文件名的目录整理方案
方案一:Batch脚本实现
适用于纯Batch环境,处理流程包含解码空格、拆分目录路径、创建目录并移动文件:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下所有含%2f/%2F的文件 for %%F in ("*%2f*" "*%2F*") do ( :: 复制原文件名到变量 set "oldname=%%~nxF" :: 解码%20为空格 set "decoded=!oldname:%20= !" :: 拆分第一个%2f/%2F为目录和文件名(统一转小写处理) set "lower=!decoded:%2F=%2f!" for /f "delims=%2f tokens=1*" %%A in ("!lower!") do ( set "dirpath=%%A" set "newname=%%B" ) :: 如果拆分后有目录名和文件名 if defined dirpath if defined newname ( :: 创建目录(含子目录) md "!dirpath!" 2>nul :: 移动文件到目录并重命名 move "%%F" "!dirpath!\!newname!" >nul ) ) endlocal echo 处理完成 pause
使用说明:将脚本保存为fix_gist_files.bat,放到解压后的Gist文件目录中双击运行即可。
方案二:Batch调用PowerShell命令实现
PowerShell对URL解码和字符串处理更灵活,适合复杂路径场景:
单行Batch调用命令
powershell -Command "Get-ChildItem -File | Where-Object { $_.Name -match '%2f|%2F' } | ForEach-Object { $decoded = [System.Web.HttpUtility]::UrlDecode($_.Name); $split = $decoded -split '/', 2; if ($split.Count -eq 2) { $dir = $split[0]; $file = $split[1]; New-Item -ItemType Directory -Path $dir -Force | Out-Null; Move-Item -Path $_.FullName -Destination (Join-Path $dir $file) } }"
核心逻辑说明
Get-ChildItem -File:获取当前目录下所有文件Where-Object { $_.Name -match '%2f|%2F' }:筛选出文件名含%2f或%2F的文件[System.Web.HttpUtility]::UrlDecode($_.Name):自动解码URL编码(%20转空格、%2F转/)-split '/', 2:按第一个/拆分出目标目录和文件名New-Item -Force:创建目标目录(已存在则不报错)Move-Item:将文件移动到对应目录并完成重命名
使用说明:将上述命令保存为.bat文件放到目标目录运行,或直接在命令提示符中执行。
内容的提问来源于stack exchange,提问作者Vicky Dev
相关产品推荐
相关产品推荐

