需要将任意给定数量的文件从给定类型(示例中为 csv)从 ./source 移动到 ./target 文件夹,并且:
源文件夹中的文件如下所示:
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%"
)
)
这个根据总大小批量移动文件提供了一些指导,但仍然缺少一些东西
目前可以使用,除了确保“孪生”文件一起移动的计数器之外。
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 文件移动到另一个位置时,保持相同的代码,它会停止工作。为什么?