我写了一个批处理文件,该文件应该找到并复制大于3.5 GB的最新构建文件。
set source=D:\src
set tmp_dir="D:\tmp"
set "file="
for /f "delims=|" %%a in ('
dir /b /o-d "%source%\*.zip" 2^>nul
^| cmd /q /v /c"set /p .=&if defined . (echo(!.!)"
') do set "file=%%a"
echo %file%
robocopy %source% %tmp_dir% %file% /MT:16 /X /MIN:3500000000 /XO /V /TS /FFT /R:3 /W:10 /ETA
我的问题是最新文件小于3.5 GB时发生的问题。在这种情况下,需要复制大于3.5 GB的下一个文件。
答案 0 :(得分:3)
你几乎拥有它。我们可以使用dir
来获取源文件夹中具有所需最小大小(robocopy
的文件列表(/l
),而不是使用/min
命令来检索文件的初始列表。 {1}})。此列表不应包括作业标题,作业页脚或目录列表(/njh
,/njf
,/ndl
)。对于每个文件,我们不需要文件的类(/nc
)或文件的大小(/ns
),但我们需要文件的时间戳(/ts
)对此字段的列表进行排序。
这将保留一个已排序的文件列表,其中较新的文件与列表中的第一个条件匹配。
@echo off
setlocal enableextensions disabledelayedexpansion
set "source=D:\src"
set "tmp_dir=D:\tmp"
set "file="
for /f "tokens=2,*" %%a in ('
robocopy "%source%" . *.zip /l /xx /is /njh /njs /ndl /nc /ns /ts /min:350000000000
^| sort /r
^| cmd /q /v /c"set /p .=&if defined . (echo(!.!)"
') do set "file=%%~nxb"
echo(%file%
if defined file (
robocopy "%source%" "%tmp_dir%" "%file%" /MT:16 /X /XO /V /TS /FFT /R:3 /W:10 /ETA
)
答案 1 :(得分:0)
您可以使用以下行
获取文件的大小for /f "usebackq" %%a in ('%file%') d set filesize=%%~za
添加
set /a filesize+=0
确保将其视为数字变量。
然后使用if
- 语句检查文件大小是否超过3500000000字节 - > 3.5 GB。
if filesize LSS 3500000000 (
echo not 3.5 GB
) ELSE (
echo bigger than 3.5 GB
)
添加其他echo
es取决于您。