批处理文件求助:按顺序拆分50万张图片至每5000张小文件夹
嘿,我懂你现在的烦恼——好不容易把50万张图片拆分到5000张的文件夹里,结果发现本该挨着的图片(比如图片1和图片2)被分到完全不同的文件夹,这完全不符合预期对吧?我来给你一个能按文件名顺序批量拆分的批处理脚本,正好解决这个问题。
这个脚本的核心思路是先按文件名排序,再依次将图片分配到对应文件夹,确保顺序完全不乱。你可以直接用下面的代码:
@echo off setlocal enabledelayedexpansion :: 配置参数:每个文件夹的目标图片数量 set "batchSize=5000" :: 配置要处理的图片扩展名,多个格式用空格分隔 set "imageExts=*.jpg *.jpeg *.png *.bmp" :: 初始化计数器和文件夹序号 set "fileCount=0" set "currentFolder=1" :: 创建第一个目标文件夹,忽略"文件夹已存在"的错误提示 mkdir "Image_Set_!currentFolder!" 2>nul :: 遍历按名称排序后的所有图片文件 for /f "delims=" %%img in ('dir /b /on %imageExts%') do ( :: 移动当前图片到目标文件夹 move "%%img" "Image_Set_!currentFolder!" :: 更新已移动文件的计数器 set /a fileCount+=1 :: 当达到批量数量时,切换到下一个新文件夹 if !fileCount! equ !batchSize! ( set "fileCount=0" set /a currentFolder+=1 mkdir "Image_Set_!currentFolder!" 2>nul ) ) echo 拆分完成!一共创建了 !currentFolder! 个有序文件夹。 pause endlocal
关键细节解释
dir /b /on %imageExts%:这是保证顺序的核心!/b只输出纯文件名,/on会让文件按自然名称顺序排序(比如1.jpg、2.jpg...10.jpg,而不是1.jpg、10.jpg、2.jpg这种字典序),完美匹配你的图片命名逻辑。enabledelayedexpansion:因为我们在循环里需要实时更新fileCount和currentFolder这两个变量,必须启用延迟扩展,否则变量值不会动态变化。mkdir ... 2>nul:加上2>nul是为了避免脚本因为“文件夹已存在”而报错,如果你中途暂停重新运行,也不会有问题。
使用注意事项
- 将脚本保存为
OrderedSplit.bat,放到你的图片文件夹根目录下运行。 - 先拿一小部分图片测试!毕竟是50万张的大数量,先验证脚本符合预期再全量运行,避免误操作。
- 如果你的图片只有特定扩展名,比如只有png,就把
imageExts改成set "imageExts=*.png"。 - 文件夹命名是
Image_Set_1、Image_Set_2...你可以根据自己的喜好改成其他格式,比如Batch_001,只需要修改mkdir里的名称即可。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

