DOS批量重命名和旋转文件夹名称

时间:2012-11-06 21:48:25

标签: batch-file dos rename directory

我想用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,并以这种方式旋转所有文件夹。

我不知道如何批量处理,请指教。

1 个答案:

答案 0 :(得分: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变量是用于记住循环后最后处理的文件夹的变量。它也在 in 循环中使用:首先,用于提取数字,第二,用于为新名称提供基础。