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 回答