批处理文件以查找具有双重文件扩展名的文件并删除最后一个文件

时间:2013-05-10 16:04:05

标签: file batch-file rename file-rename batch-rename

我有几个文件夹,其文件具有双重文件扩展名以及常规文件扩展名。我需要创建一个批处理脚本来搜索所有文件夹,并删除任何具有双扩展名的文件的最后一个扩展名。没有任何文件扩展名是一致的。

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

2 个答案:

答案 0 :(得分:1)

如果输出正常,请尝试此操作并删除echo

@echo off &setlocal
for /r \ %%i in (*) do (
    for %%j in ("%%~ni") do if "%%~xj" neq "" echo ren "%%~fi" "%%~nj"
)

编辑:增加了对整个高清的支持。

答案 1 :(得分:1)

@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。在验证了您要执行的操作后,您需要删除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

显然," extras"如果需要,可以延长。