批量脚本扩展需求:按规则移动并重命名DDS文件
批处理脚本实现文件批量移动并重命名
核心思路
用嵌套逻辑实现:按顺序遍历源文件,计算每个文件对应的目标文件夹,同时生成指定起始编号的带前导零文件名,完成移动+重命名操作。
完整脚本示例
@echo off setlocal enabledelayedexpansion :: 配置参数 set "start_folder=002360" :: 第一个目标文件夹的起始名称 set "start_file=003760" :: 第一个文件的目标起始编号(不带后缀) set "files_per_folder=4" :: 每个文件夹要放入的文件数(对应你说的%y%) set "source_file_prefix=file-" :: 源文件的前缀(匹配你生成的file-*.dds) :: 把带前导零的起始编号转成纯数值,方便后续递增 set /a folder_num=1%start_folder% - 1000000 set /a file_num=1%start_file% - 1000000 :: 按顺序处理每个源文件 set "current_file_idx=0" for /f "delims=" %%f in ('dir /b /a-d "%source_file_prefix%*.dds"') do ( :: 计算当前文件对应的目标文件夹索引 set /a folder_idx=current_file_idx / files_per_folder set /a target_folder_num=folder_num + folder_idx :: 格式化为6位带前导零的文件夹名 set "target_folder=000000!target_folder_num!" set "target_folder=!target_folder:~-6!" :: 生成6位带前导零的目标文件名 set /a target_file_num=file_num + current_file_idx set "target_file=000000!target_file_num!" set "target_file=!target_file:~-6!.dds" :: 执行移动并重命名 move "%%f" "!target_folder!\!target_file!" >nul echo 已处理:%%f → !target_folder!\!target_file! set /a current_file_idx+=1 ) endlocal pause
关键细节说明
- 延迟变量扩展:必须开启
enabledelayedexpansion,否则循环内变量无法实时更新取值。 - 前导零格式化:通过补全6位零字符串再截取最后6位,确保编号始终是固定长度的带前导零格式。
- 文件分配逻辑:用
current_file_idx / files_per_folder计算文件夹索引,自动把files_per_folder个文件分配到同一个文件夹。 - 数值转换:把
002360这类带前导零的字符串转成纯数值2360,避免递增时出现非预期的前导零问题。
自定义调整
- 修改
start_folder、start_file可指定不同的起始编号。 - 调整
files_per_folder对应你的变量%y%,控制每个文件夹的文件数量。 - 若源文件命名规则不同,修改
source_file_prefix匹配你的源文件前缀即可。
内容的提问来源于stack exchange,提问作者misha.physics
相关产品推荐
相关产品推荐

