@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
合理的是,如果需要,可以擴展「附加」的列表。
哇!完美的作品!謝謝!你是救命的人:) – Brian 2013-05-10 17:04:41
我有幾個例子,它不能重命名文件,因爲已經存在一個文件。在這些情況下,是否有辦法將其重命名爲其他內容?例如:文件filename.doc已經存在,並且批處理文件試圖重命名filename.doc.sh有沒有辦法將它重命名爲filename_new.doc?我嘗試了一些東西,但我的語法不正確。 – Brian 2013-05-10 20:06:18