You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写按累计总大小批量移动文件的Windows批处理脚本

批处理修正方案

你之前的代码失效原因确实是仅统计文件数量,没有做文件大小的累加校验,修正后可满足累计大小凑够100MB即停止、仅移动单个大小≤10KB文件的要求,代码如下:

@echo off
setlocal enabledelayedexpansion

:: 基础参数配置
set "Source=C:\Users\%Username%\Desktop\Dropbox\Pre"
set "Target=C:\Users\%Username%\Desktop\Dropbox\Pos"
set "MaxTotalSizeMB=100"
set "MaxSingleSizeKB=10"

:: 单位转换为字节避免计算误差
set /a MaxTotalSizeBytes=MaxTotalSizeMB * 1048576
set /a CurrentTotalBytes=0

:: 遍历源目录文件,默认按创建时间从早到晚排序,可修改/o参数调整排序规则
for /f "delims=" %%a in ('dir /a-d /b /o:d "%Source%\*" 2^>nul') do (
    set FileSize=%%~za
    :: 校验单个文件大小是否符合≤10KB要求
    set /a SingleSizeLimit=MaxSingleSizeKB * 1024
    if !FileSize! leq !SingleSizeLimit! (
        :: 校验累加后是否超过总大小限制
        set /a NewTotal=CurrentTotalBytes + FileSize
        if !NewTotal! gtr !MaxTotalSizeBytes! goto finishMove
        :: 执行移动
        move /y "%Source%\%%a" "%Target%\"
        set CurrentTotalBytes=!NewTotal!
    )
)

:finishMove
endlocal
pause

逻辑说明

  • 所有参数都可按需修改:如果不需要限制单个文件大小,把MaxSingleSizeKB改为一个极大值即可;如果要调整总大小阈值,修改MaxTotalSizeMB的数值即可
  • 默认按文件创建时间从早到晚排序移动,如需调整排序规则,修改dir命令的/o参数:
    • /o:-d:按创建时间从晚到早排序
    • /o:n:按文件名字母顺序排序
    • /o:s:按文件大小从小到大排序
  • 累加大小一旦超过设置的100MB阈值就立刻停止移动,和手动选择文件凑总大小的效果完全一致

内容的提问来源于stack exchange,提问作者Caracks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:15:04