替换Windows文件名中的URL字符编码(批处理)
我试图在Windows文件夹及其子文件夹中的所有文件名中用相应的ASCII值替换(例如,替换Windows文件名中的URL字符编码(批处理),windows,batch-file,urlencode,batch-rename,Windows,Batch File,Urlencode,Batch Rename,我试图在Windows文件夹及其子文件夹中的所有文件名中用相应的ASCII值替换(例如,%20作为空格的占位符) 如果您有一个简单的.bat文件可以完成此任务,但它有一些限制: @echo off Setlocal enabledelayedexpansion Set "Pattern0=%%20" Set "Replace0= " Set "Pattern1=%%27" Set "Replace1='" Se
%20
作为空格的占位符)
如果您有一个简单的.bat
文件可以完成此任务,但它有一些限制:
@echo off
Setlocal enabledelayedexpansion
Set "Pattern0=%%20"
Set "Replace0= "
Set "Pattern1=%%27"
Set "Replace1='"
Set "Pattern2=%%28"
Set "Replace2=("
Set "Pattern3=%%29"
Set "Replace3=)"
Set "Pattern4=%%5B"
Set "Replace4={"
Set "Pattern5=%%5D"
Set "Replace5=}"
For %%# in ("D:\Dropbox\Music\*.mp3") Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern0%=%Replace0%!"
Ren "%%#" "!File:%Pattern1%=%Replace1%!"
Ren "%%#" "!File:%Pattern2%=%Replace2%!"
Ren "%%#" "!File:%Pattern3%=%Replace3%!"
Ren "%%#" "!File:%Pattern4%=%Replace4%!"
Ren "%%#" "!File:%Pattern5%=%Replace5%!"
)
Pause&Exit
我想解决两个主要限制:
。\Music\
文件夹根目录。我想看看
子目录中的文件也是如此For
循环
(例如,所有的%20
都取代了第一遍,但除此之外没有其他内容)%XX
的形式,其中X是十六进制值
dir/s/b
谢谢看来我剩下的唯一一步就是手动填写具体的重命名,是吗?例如,下一行可能是
set“file=”!文件:%%29=)!“
--等等?如果是这样,我想知道是否有一种方法可以避免任何/每个ASCII编码(源自URL编码)使用一行代码?同样,我们知道要匹配的值的格式总是%HH
,其中H=十六进制字符。@DerekClark是的,只添加缺少的替换项。您也可以搜索百分号,获取接下来的两个字符并转换它们,但这并不是很重要,再次感谢您。我熟悉r的惯例正则表达式,但请注意,在处理Windows脚本时,知识可能无法很好地传递
FOR /F "delims=" %%# in ('dir /s /b "D:\Dropbox\Music\*.mp3"') Do (
...
)
FOR /F "delims=" %%# in ('dir /s /b "D:\Dropbox\Music\*.mp3"') Do (
set "file=%%~#"
set "file="!File:%%20= !"
set "file="!File:%%28=(!"
...
move "%%~#" "!file!"
)
setlocal DisableDelayedExpansion
FOR /F "delims=" %%# in ('dir /s /b "D:\Dropbox\Music\*.mp3"') Do (
set "file=%%~#"
setlocal EnableDelayedExpansion
set "file="!File:%%20= !"
set "file="!File:%%28=(!"
...
move "%%~#" "!file!"
endlocal
)