拆分部分中的大目录

时间:2015-01-08 14:20:53

标签: batch-file

任何人都知道我如何按大小对目录中的数据进行排序,然后说8GB然后溢出创建一个与原始directoryName_1,directoryName_2同名的新文件夹,依此类推,使用批处理脚本 基本上我有一堆eml存储在目录树中,就像这样

E:\EMAIL\EML
├───SA36-7
│   ├───0
│   │   ├───0
│   │   ├───1
│   │   ├───2
│   │   ├───3
│   │   ├───4
│   │   ├───5
│   │   ├───6
│   │   ├───7
│   │   ├───8
│   │   ├───9
│   │   ├───a
│   │   ├───b
│   │   ├───c
│   │   ├───d
│   │   ├───e
│   │   └───f
│   ├───1
│   │   ├───0
│   │   ├───1
│   │   ├───2
SA44-3
├───0
│   ├───0
│   ├───1
│   ├───2
│   ├───3
│   ├───4
│   ├───5
so on

我需要确保这些顶级邮件目录SA44-3中的每一个都不大于8GB,因此脚本应该计算每个顶级文件夹的大小,如果超过8GB,则创建一个新的Called,例如。 SA44-3-1 sa44-3-2等等,将剩余的数据移动到新文件夹

这是我有多远

@echo off
setlocal

set maxbytesize=800000

set n=1

set nf=0

FOR /R %%f IN (*.eml) DO (
    IF !n!==1 (
      SET /A nf+=1
      ("%CD%")-!nf!
    )
MOVE /Y "%%f" ("%CD%")-!nf!

IF !n!==!maxbytesize! (
      SET n=1
    ) ELSE (
      SET /A n+=1
    )
)

所以最终结果应该有类似这样的目录

E:\EMAIL\EML
├───SA36-7
├───SA36-7-1
├───SA36-7-2
├───SA36-7-3
├───SA44-3
├───SA44-3-1
├───SA44-3-2

这些目录中的每一个都应该是10KB到8GB之间的任何值,但不能大于10GB到8GB。只要邮件“SA”目录保留为根文件夹名称,子目录\ 0 \ 1 \ 2就不重要了

1 个答案:

答案 0 :(得分:1)

文件的磁盘空间在 clusters 中分配,通常为4 KB大小,即1到4096字节的文件占用一个群集,4097到8192个字节占用两个群集,这样,管理集群而不是文件大小的字节更精确,这种方法允许在SET / A命令使用的32位整数中管理请求的8 GB限制。

@echo off
setlocal EnableDelayedExpansion

set /A "KB=1024, MB=1024*KB, GB=1024*MB, ClusterSize=4*KB, MaxClusters=GB/ClusterSize*8"

rem The current ClusterSize may be obtained this way:
rem for /F "tokens=4" %%a in ('fsutil fsinfo ntfsinfo E: ^| findstr /C:"Bytes per cluster:"') do set ClusterSize=%%a

cd /D E:\EMAIL\EML
for /F %%d in ('dir /B /AD') do (
   set "dirToMove="
   set /A nextDir=0, clusters=0
   for /R "%%d" %%f in (*.eml) do (
      set clusters+=(%%~Zf-1)/ClusterSize+1
      if !clusters! gtr !MaxClusters! (
         set /A nextDir+=1, clusters=(%%~Zf-1)/ClusterSize+1
         set "dirToMove=%%d-!nextDir!"
         md "!dirToMove!"
      )
      if defined dirToMove move "%%f" "!dirToMove!"
   )
)

PS - 我建议你改变标题;本主题不是“按大小排序文件”,而是“将大型目录拆分为”。