【问题标题】:batch file to find files with double file extensions and remove the last one批处理文件以查找具有双文件扩展名的文件并删除最后一个文件
【发布时间】:2013-06-22 18:27:47
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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
    

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

    【讨论】:

    • 哇!完美运行!谢谢!你是一个救生员:)
    • 我有几个例子,它不能重命名文件,因为已经存在一个文件。在这些情况下,有没有办法将其重命名为其他名称?示例:文件 filename.doc 已经存在并且批处理文件尝试重命名 filename.doc.sh 有没有办法像 filename_new.doc 一样重命名它?我尝试了一些东西,但我的语法不正确。
    【解决方案2】:

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

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

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

    【讨论】:

    • 哦 - 如此接近!但是目标名称应该是%%~ni%%~nj(应该是相同的)-%%~Fj 会产生REN 的语法错误(但应该可以使用MOVE
    • @Peter - 哦,我总是忘记这个ren to full name syntax error:)
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多