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