2

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

1 に答える 1

4

私は問題に少し違ったアプローチをします。01最初にすべての数値 ( を含む)を 1 減らす方が簡単です。

                  ┌─────> 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ループ後に最後に処理されたフォルダーを記憶するために使用されるものです。これはループでも使用さます。最初は番号を抽出するため、2 番目は新しい名前のベースを提供するためです。

于 2012-11-06T23:10:38.290 に答える