如何修改批处理文件实现各文件夹内文件独立从1开始重命名
子文件夹内MP4文件独立从1开始重命名方案
问题现状
现有批处理代码会全局累加计数,导致子文件夹的文件编号延续上一文件夹的计数,无法实现每个子文件夹内文件从1开始编号的需求:
@Set "count=0" @For /F "Delims=" %%I In ('Dir /B/S/A-D-S "*.mp4" 2^>NUL')Do @( For %%J In ("%%~pI.")Do @(Set /A count+=1 SetLocal EnableDelayedExpansion Ren "%%I" "!count!%%~xI" EndLocal)) @Pause
当前执行结果:
- Folder1(含60个文件):1.mp4、2.mp4……60.mp4
- Folder2(含60个文件):61.mp4、62.mp4……120.mp4
- Folder3(含30个文件):121.mp4、122.mp4……160.mp4
期望效果:每个子文件夹内的文件从1开始计数,到该文件夹内文件总数结束,如Folder2的文件应为1.mp460.mp4,Folder3为1.mp430.mp4。
修改后的批处理代码
@echo off :: 递归遍历所有子文件夹 for /d /r %%d in (*) do ( pushd "%%d" set "count=0" :: 遍历当前文件夹下的MP4文件 for /f "delims=" %%f in ('dir /b /a-d "*.mp4" 2^>nul') do ( set /a count+=1 setlocal enabledelayedexpansion ren "%%f" "!count!.mp4" endlocal ) popd ) @pause
关键修改点说明
- 按文件夹独立处理:用
for /d /r %%d in (*)递归遍历每个子文件夹,确保每个文件夹单独执行重命名逻辑。 - 计数重置:进入每个文件夹后立即将
count设为0,保证每个文件夹的计数从1开始累加。 - 路径隔离:通过
pushd和popd切换到当前子文件夹处理文件,避免跨文件夹的路径干扰,重命名逻辑更清晰。
原代码的核心问题是count为全局变量,所有文件夹共享同一计数,导致编号连续累加。修改后每个文件夹独立初始化计数,完美匹配需求。
内容的提问来源于stack exchange,提问作者Ionut Bejinariu
相关产品推荐
相关产品推荐

