我尝试在 win7 下借助批处理脚本从每个文件名中删除“-min”部分来重命名文件夹和子文件夹中的所有文件
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
FOR /R %%A in (.*)-min.png DO REN "%%A-min.png" "%%A.png"
我猜这里的 SET 参数好像有问题,因此我尝试这样做:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
SET "oldname=%%G"
SET "newname=!oldname:~0,-8!.png"
REN "!oldname!" "!newname!"
)
但我得到的都是错误。当我回显循环中的最后一条指令时,它会给出正确的路径。我遗漏了什么?
答案1
重命名文件时,目标名称中不能包含文件夹路径。您可以使用%%~nxG
来获取不带路径的文件名和扩展名。您不需要 oldname 变量 - 只需使用 即可%%G
。您可以删除一行并直接在 REN 语句中执行字符串操作。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
SET "newname=%%~nxG"
REN "%%G" "!newname:~0,-8!.png"
)
请注意,如果文件路径的任何部分包含该!
字符,上述操作将失败,因为 FOR 变量扩展发生在延迟扩展之前,因此它会破坏值。!
通过确保在扩展 FOR 变量时禁用延迟扩展,可以保留任何内容。这需要在循环内打开和关闭延迟扩展。
@echo off
setlocal disableDelayedExpansion
cd F:\Mega.Pack-128x128\textures\
for /r %%G in (*-min.png) do (
set "oldpath=%%G"
set "newname=%%~nxG"
setlocal enableDelayedExpansion
ren "!oldpath!" "!newname:~0,-8!.png"
endlocal
)