2012-11-06 125 views
2

我想用DOS批處理腳本重命名和旋轉文件夾名稱。DOS批量重命名和旋轉文件夾名稱

例子:

我有這樣的:

C:\Main\Folder01 
C:\Main\Folder02 
C:\Main\Folder03 
C:\Main\Folder04 
C:\Main\Folder05 

我需要重命名FOLDER01是在列表的最後,它西港島線成爲Folder06的例子。但它可能是Folder50,具體取決於文件夾的數量。所以我想得到這個。

C:\Main\Folder02 
C:\Main\Folder03 
C:\Main\Folder04 
C:\Main\Folder05 
C:\Main\Folder06 

然後我需要重新索引所有的文件夾,併爲01 02 03 04 05,所以Folder02將成爲FOLDER01並以這種方式旋轉的所有文件夾。

我沒有線索如何批量這個,請諮詢。

回答

4

我會以不同的方式處理問題。它會更容易通過一個第一降低所有號碼(包括01):

    ┌─────> C:\Main\Folder00 
C:\Main\Folder01 ─┘┌────> C:\Main\Folder01 
C:\Main\Folder02 ──┘┌───> C:\Main\Folder02 
C:\Main\Folder03 ───┘┌──> C:\Main\Folder03 
C:\Main\Folder04 ────┘┌─> C:\Main\Folder04 
C:\Main\Folder05 ─────┘ 

那麼00文件夾重命名爲前者的名字:

C:\Main\Folder00 ──┐ 
C:\Main\Folder01 │ C:\Main\Folder01 
C:\Main\Folder02 │ C:\Main\Folder02 
C:\Main\Folder03 │ C:\Main\Folder03 
C:\Main\Folder04 │ C:\Main\Folder04 
        └─> C:\Main\Folder05 

它似乎更容易這樣,因爲循環重命名文件夾也會將最後處理的名稱存儲在變量中,然後該變量將用於重命名00文件夾。下面是我在談論的實現:

@ECHO OFF 
SET "pathtemplate=C:\Main\Folder" 
FOR /D %%I IN ("%pathtemplate%??") DO (
    SET "oldname=%%~nxI" 
    SETLOCAL EnableDelayedExpansion 
    SET /A "newsuffix=1!oldname:~-2!-1" 
    RENAME "%%I" "!oldname:~0,-2!!newsuffix:~1!" 
    ENDLOCAL 
) 
RENAME "%pathtemplate%00" "%oldname%" 

oldname變量是用來記住循環之後的最後處理的文件夾中的一個。它也被用於中的循環:首先,提取數字,第二,爲新名稱提供基礎。

+0

真棒!它確實工作完美!即使你以不同的方式做了它,它也正是我的意思......太棒了!謝謝.. – user1804423

+0

+1 - 做得很好。十分優雅。 – dbenham

+0

@dbenham:謝謝!現在有圖片! :) –