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

问题描述 投票:0回答:1

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

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

源文件夹中的文件如下所示:

d:\源 ase1-yyyymmddhhmm-data.csv

d:\源 ase1-yyyymmddhhmm-flag.csv

d:\源 ase2-yyyymmddhhmm-data.csv

d:\源 ase2-yyyymmddhhmm-flag.csv

要求是将“数据”和各自的“标志”文件移动到一起。它们是使用相同的“修改日期”创建的,因此可以根据该日期运行循环,并且所有文件将作为一对正确缩短。 与“数据”(小于 100 MB)相比,“标志”文件非常小(小于 200 KB)。

到目前为止,移动所有文件或根本不移动任何文件的代码似乎是循环如何累积文件大小以与 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%"
        )
    )

这个根据总大小批量移动文件提供了一些指导,但仍然缺少一些东西

batch-processing move filesize
1个回答
0
投票

目前可以使用,除了确保“孪生”文件一起移动的计数器之外。

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 文件移动到另一个位置时,保持相同的代码,它会停止工作。为什么?

© www.soinside.com 2019 - 2024. All rights reserved.