如何查找和复制以前创建的大于自定义大小的最新文件?

时间:2016-09-28 13:00:03

标签: batch-file

我写了一个批处理文件,该文件应该找到并复制大于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的下一个文件。

2 个答案:

答案 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取决于您。