任何人都知道我如何按大小对目录中的数据进行排序,然后说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就不重要了
答案 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 - 我建议你改变标题;本主题不是“按大小排序文件”,而是“将大型目录拆分为”。