移动给定卷(大小)的文件

移动给定卷(大小)的文件

需要将给定类型(示例中为 csv)的任意数量的文件从 ./source 移动到 ./target 文件夹,并且:

  • 移动的所有文件的总大小低于给定值 SrcMax
  • 文件成对移动,因此“双胞胎”保持在一起

到目前为止的代码,移动所有文件,或者什么都不做

set DataLoc=d:\target
Set HoldLoc=d:\source

set SrcCount=0
set SrcSize=0

REM Set 2MB total volume to move
set SrcMax=2000000

FOR /F "TOKENS=*" %%a IN ('dir /A-D /O-D /B "%HoldLoc%"\*.csv') DO (
        SET /A SrcCount += 1 
        SET /A SrcSize+=%%~za
        oddn=%SrcCount% %% 2
        if !SrcSize! LEQ %SrcMax% && !oddn!==0 (
        MOVE /y "%HoldLoc%\%%a" "%DataLoc%"
        )
    )

编辑 1:此基于总大小移动文件的批处理提供了一些指导,但仍然缺少一些东西

添加更多信息:

源文件夹中的文件如下:

d:\source\base1-yyyymmddhhmm-data.csv(小于 100 MB)

d:\source\base1-yyyymmddhhmm-flag.cs​​v(小于 200 KB)

d:\source\base2-yyyymmddhhmm-数据.csv

d:\source\base2-yyyymmddhhmm-flag.cs​​v

...

目标文件夹为空

要求是将“数据”和相应的“标志”文件一起移动。它们是使用相同的“修改日期”创建的,因此可以根据此日期运行循环,并且所有文件将作为一对正确缩短。与“数据”相比,“标志”文件确实很小。

问题似乎是循环如何累积文件大小以与 SrcMax 进行比较。

修正了:

!源大小!LEQ %源最大%

(而不是 SrcCount)。

答案1

目前这是可行的,除了计数器确保“孪生”文件一起移动。

set DataLoc=d:\target
Set HoldLoc=d:\source

set SrcCount=0
set SrcSize=0

REM Set 2MB total volume to move
set SrcMax=2000000

FOR /F TOKENS^=* %%a IN ('dir /A-D /O-D /B "%HoldLoc%"\*.csv') DO (
    SET /A SrcCount += 1 
    SET /A "SrcSize+=%%~za"
    if !SrcSize! LEQ %SrcMax% (
        MOVE /y "%HoldLoc%\%%~nxa" "%DataLoc%")
    )

问题:当将 .bat 文件移动到另一个位置,保留相同的代码时,它会停止工作。为什么?

相关内容