@ECHO OFF
SETLOCAL
SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF NOT EXIST "%%~dpni" ECHO REN "%%~fi" "%%~ni"
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" ECHO CAN NOT REN "%%~fi" "%%~ni"
)
GOTO :EOF
这批应该完成任务。
对于以 为根的树中的每个文件sourcedir
,如果NAME
文件本身包含“扩展名”并且不存在没有原始扩展名的文件名,则重命名该文件。这样,如果...picture.jpg.doc
找到,则仅当...picture.jpg
不存在时才应进行重命名。
重命名的命令只是ECHO
ed。您需要删除ECHO
关键字才能激活重命名 - 在验证这是您想要执行的操作之后。
我添加了第二行来报告由于现有文件而无法完成重命名。这可以做得稍微好一点,但它会起作用。
修改名称以防无法进行简单重命名。
注意 - 此版本将立即重命名 - 没有ECHO
es 首先提供列表,因为在重命名文件时提供这样的列表可能会在主重命名运行时产生不同的结果。
@ECHO OFF
SETLOCAL
SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" (
SET renreq=Y
FOR %%a IN (new alt extra another 1 2 3 4 5 6 7 8 9) DO IF DEFINED renreq (
IF NOT EXIST "%%~dpi%%~nn_%%a%%~xn" (
REN "%%~fi" "%%~nn_%%a%%~xn"
SET "renreq="
)
)
IF DEFINED renreq ECHO CAN NOT REN "%%~fi"
) ELSE (
REN "%%~fi" "%%~ni"
)
)
GOTO :EOF
显然,如果需要,可以扩展“附加”列表。