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」という名前が付けられますか?

4

1 に答える 1

3

現在のディレクトリを追跡し、変更されるたびにカウンターをリセットする必要があります。

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"
于 2013-03-13T01:22:48.653 に答える