[英]batch file to find files with double file extensions and remove the last one
我有几个文件夹,其文件具有双文件扩展名以及常规文件扩展名。 我需要创建一个批处理脚本来搜索所有文件夹,并删除任何具有双扩展名的文件的最后一个扩展名。 没有任何文件扩展名是一致的。
Here's an example
C:\test\regular.exe
C:\test\picture.jpg.doc
C:\newtest\document.doc.pdf
End Result I need
C:\test\regular.exe
C:\test\picture.jpg
C:\newtest\document.doc
如果输出正常,请尝试此操作并删除echo
:
@echo off &setlocal
for /r \ %%i in (*) do (
for %%j in ("%%~ni") do if "%%~xj" neq "" echo ren "%%~fi" "%%~nj"
)
编辑:增加了对整个高清的支持。
@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
合理地显然,如果需要,可以扩展“额外”列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.