将一个大文件夹分解为带有顺序文件的较小文件夹



我很熟悉使用批处理文件。我需要将一个约500万张图像的文件夹分为每个约5000个较小的文件夹。我已经能够做到这一点,但是它们没有顺序分开。例如,图像1将最终放在一个文件夹中,例如,图像2在完全不同的文件夹中。这是我到目前为止所拥有的。

@echo off
setlocal enabledelayedexpansion
set source=C:Desktoptest
set numfiles=0
set numdirs=1
set filelimit=5000
for /F "tokens=*" %%G in ('dir "%source%" /A:-D /B') do (
 set /A numfiles+=1
 set target=0000!numdirs!
 set target=!target:~-5!
 if not exist "%source%!target!" md "%source%!target!"
 move "%source%%%G" "%source%!target!"
 if [!numfiles!]==[%filelimit%] (
  set /A numdirs+=1
  set numfiles=0
 )
)

文件名的示例:

02C_CN201S7P_00001.tif
02C_CN201S7P_00002.tif
02C_CN201S7P_00003.tif

任何帮助都将不胜感激。

在FAT16,FAT32和EXFAT上驱动文件名称未按NTFS驱动器上的名称排序。因此,建议使用 dir 选项/ON获取按名称订购的文件名列表。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "source=C:Desktoptest"
set "numfiles=0"
set "numdirs=1"
set "filelimit=5000"
for /F "delims=" %%G in ('dir "%source%" /A:-D /B /ON 2^>nul') do (
    set /A numfiles+=1
    set "target=0000!numdirs!"
    set "target=!target:~-5!"
    if not exist "%source%!target!" md "%source%!target!"
    move "%source%%%G" "%source%!target!"
    if !numfiles! == %filelimit% (
        set /A numdirs+=1
        set "numfiles=0"
    )
)

dir 命令行上添加 /ON是批处理文件代码上唯一的修改,并与有问题的代码相比,对执行的效果进行了影响。

在两个环境变量引用周围的方括号比较两个数字作为字符串没有特殊含义,因此在这里不需要,因为两个环境变量始终定义。因此,如果条件命令行。

最新更新