簡體   English   中英

批處理文件以查找具有雙重文件擴展名的文件並刪除最后一個文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM