我在一个目录中有一些mp4文件,该目录由 wget 命名,该实用程序用于从互联网上下载文件。
问题是,它将文件名写成" 1%20-%201%20-%20概述%20%2802%3A09%29.mp4 "(编码百分比字符串" 1 - 1 - 概述(02:09)"),这是一件令人讨厌的事 - 它并不那么简单。所以我决定用batch命令转换它们。
由于这些文件只包含一些特殊字母(空格,冒号和括号),我想我只是在 cmd 中执行一些命令,并在尝试了几个命令之后将%20更改为SPACE,我被卡住了。
在批处理文件中,我使用:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.mp4) do (
set aaa=%%i
rename "%%i" "!aaa:%%20= !"
)
我已经尝试过(进行测试):
SETLOCAL enabledelayedexpansion
FOR %i in (*.mp4) do (
SET aaa="%i"
echo "!aaa:%%20= !"
)
我尝试过更改'!'到了'%',但它没有用。它似乎相当于打印我写的内容(比如几行!aaa:%% 20 =!),或者 aaa 的值没有打印出来变化
有人能帮助我吗?我以为只是在改变' %%'到'%'将批处理文件脚本转换为cmd命令。如果不是,还有什么其他差异?
答案 0 :(得分:0)
@echo off
setlocal
:: Define simple macros to support JavaScript within batch
set "beginJS=mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write("
set "endJS=));""
SETLOCAL enabledelayedexpansion
FOR %%i in (*.mp4) do (
for /f %%N in (
'%beginJS% decodeURIComponent("%%i") %endJS%'
) do set "dec=%%N"
echo !dec!
)
如果您从javascript(使用mshta)尝试decodeURIComponent会怎么样?
答案 1 :(得分:0)
您的问题是SETLOCAL无法在命令行中运行,因此您永远不会激活延迟扩展。
此外,您应该在分配变量之前放置引号,以便引号不包含在值中。
您可以启动一个新的cmd.exe shell,并启用延迟扩展以使其正常工作。
cmd /v:on
FOR %i in (*.mp4) do (SET "aaa=%i"&echo "!aaa:%%20= !")
您需要注意,您无法将%3A
更改为:
,因为:
在文件名中无效。
您可能希望查看使用正则表达式搜索的JREN.BAT utility并替换以重命名文件:
您可以执行以下操作:
jren "%20" " " /fm *.mp4
jren "%3A" "." /fm *.mp4
如果在批处理脚本中使用上述命令,则需要在每个命令前加上CALL并加倍百分比。
请注意,我将%3A
转换为.
而不是:
,因为冒号不能用于文件名。