2013-03-13 68 views
0

我正在編寫可以快速運行通過根文件夾的批處理文件,我們只是說「C:\ SomeMusic \」,裏面有很多子文件夾和文件。我想要做的是重命名只是在每個文件夾中的文件,但以順序方式(例如somefile1.ext,somefile2.ext ...)批處理文件,可以索引和重命名多個子文件夾中的文件,每當循環進入新文件夾時重置索引

我現在有這個權利,但我不知道如何在循環進入一個新的目錄

SET COUNT=0 
setlocal ENABLEDELAYEDEXPANSION 
FOR /R %%X IN (*.mp3) DO (
    SET /A COUNT=!COUNT!+1 
    SET FN=%%~nxX 
    ECHO Renamed "!FN!" to "song!COUNT!.mp3" 
    REN %%X song!COUNT!.mp3 
) 
:EOF 
endlocal 
PAUSE 

在快速旁註重置我的櫃檯:如果我像這樣運行重命名命令,它將命名文件「song1.mp3」,「song2 .mp3「」song3.mp3「,無論他們的名字是什麼?

+0

在您的旁註中:當然會。你說'REN %% X song!COUNT!.mp3',它將名字硬編碼爲'song' + count +'.mp3'。批處理文件完全按照您的要求進行。也許你打算使用'!FN !! COUNT!.mp3'而不是'song!COUNT!.mp3'? – 2013-03-13 01:11:06

+0

抱歉,不清楚的是:!FN!只是在那裏顯示重命名文件的文件名,讓用戶對發生的事情有一點了解。 – AndrielChaoti 2013-03-13 01:13:46

+0

這不會改變我的評論。 :-)這個批處理文件是*仍然*正在做你剛纔告訴它做的事情 - 將'%% X'重命名爲'song!COUNT!',這就解釋了爲什麼每個文件都被重命名爲'song' 「他們的名字曾經是「 - 你把'song'硬編碼爲每個名字的開頭。 – 2013-03-13 01:19:55

回答

2

你需要跟蹤當前目錄下,並在每次改變時間計數器復位:

setlocal ENABLEDELAYEDEXPANSION 
FOR /R %%X IN (*.mp3) DO (
    IF NOT "%%~dpX"=="!LASTPATH!" (SET /A COUNT=0) ELSE (SET /A COUNT=!COUNT!+1) 
    SET LASTPATH=%%~dpX 
    REN "%%X" song!COUNT!.mp3 
) 
endlocal 

注意,結果文件名會songX.mp3。如果您需要該文件來保留其原始名稱,請使用以下重命名代碼:

REN "%%X" "%%~nX!COUNT!%%~xX" 
+0

工作得很好,謝謝! – AndrielChaoti 2013-03-13 01:29:06