0

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

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
4

2 回答 2

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不存在时才应进行重命名。

重命名的命令只是ECHOed。您需要删除ECHO关键字才能激活重命名 - 在验证这是您想要执行的操作之后。

我添加了第二行来报告由于现有文件而无法完成重命名。这可以做得稍微好一点,但它会起作用。


修改名称以防无法进行简单重命名。

注意 - 此版本将立即重命名 - 没有ECHOes 首先提供列表,因为在重命名文件时提供这样的列表可能会在主重命名运行时产生不同的结果。

@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

显然,如果需要,可以扩展“附加”列表。

于 2013-05-10T16:32:55.567 回答
1

试试这个并删除echo,如果输出正常:

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

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

于 2013-05-10T16:28:02.333 回答