2012-03-04 41 views
0

我只需要重命名文件序列,從######。avi到### two.avi使用.bat 所以我需要刪除3個擴展前的最後一個符號和將它們改爲「兩個」。我發現前綴更改的解決方案,只需更改後綴使用.bat

@echo off 
for %%i in (*.avi) do (set fname=%%i) & call :rename 
goto :eof 
:rename 
ren %fname% two%fname:~3% 
goto :eof 

但沒有後綴。 在此先感謝。

UPD。 謝謝你!這是解決方案。我可以帶着+1代表來接你,但我不能。 (不具備所需的15 REP) 另外,不寫了這麼多,這可以在較短的文字來完成:

@echo off 
for %%i in (*.avi) do (set fname=%%i) & call :rename 
:renameFile 
ren %fname% %fname:~0,3%two.avi 
+0

如果名稱包含空格,'^'或'&',除非使用引號,否則重命名將失敗。 – dbenham 2012-03-05 11:28:36

+0

如果所有原始文件具有相同的長度名稱(即,六個字符),這種更簡單的方法也適用:'REN ??????。AVI ??? TWO.AVI' – Aacini 2012-03-07 14:25:36

回答

2

你被關閉,你只需要〜n的擴展修飾符來獲得基沒有擴展名的名字。它適用於FOR變量以及CALL參數。我會改變你的:重命名例程的名稱,以免它與RENAME命令混淆)。

@echo off 
for %%i in (*.avi) do (set fname=%%~ni) & call :renameFile 
goto :eof 
:renameFile 
ren "%fname%.avi" "%fname:~0,-3%two.avi" 
goto :eof 

如果您激活延遲擴展,則不需要該子例程。我在循環中切換延遲擴展,以便在分配fname期間!的文件名未損壞。

@echo off 
for %%i in (*.avi) do (
    set fname=%%~ni 
    setlocal enableDelayedExpansion 
    ren "!fname!.avi" "!fname:~0,-3!two.avi" 
    endlocal 
) 
+0

+1:這就是我將如何做到這一點,除了我不知道「在fname的分配期間沒有損壞」 - 每天學習一些關於CMD.EXE的新知識;-) – 2012-03-05 06:56:55