用于复制大于 700MB 的最新文件的批处理脚本

Posted

技术标签:

【中文标题】用于复制大于 700MB 的最新文件的批处理脚本【英文标题】:Batch script to copy latest file larger than 700MB 【发布时间】:2014-03-13 13:40:39 【问题描述】:

我正在尝试编写一个批处理脚本,该脚本将复制在大于 700MB 的目录中创建的最新文件。我需要文件大小,因为我不想复制当前正在创建的文件,因此比典型的备份文件要小。

有人可以修改下面的脚本以包含 >700MB 的要求吗?

谢谢!

:: Erase the content of the "sql_individual_backup" directory
cd "C:\Backup\sql_individual_backup"
del *.* /Q

:: Start to copy over the most recent file
@echo off

set "source=C:\Backup\sql_hourly"
set "dest=C:\Backup\sql_individual_backup"

pushd "%source%" ||(
echo.Source does not exist&pause&goto EOF)

for /f "tokens=*" %%f in (
'dir /A-D /OD /B') Do set "file=%%f"

popd

xcopy /d /i "%source%\%file%" "%dest%\"

:: Close the command prompt window
exit 0

【问题讨论】:

检查当前的写入访问(例如this SO thread 中解释的)而不是依赖某些文件大小限制(这是非常危险的)不是更好吗? 【参考方案1】:

This SO answer 概述了如何在批处理脚本中获取文件的大小。有了这些信息,您应该能够扩展您的脚本以满足您的要求。

@echo off
setlocal
set file="test.cmd"
set maxbytesize=1000

FOR /F "usebackq" %%A IN ('%file%') DO set size=%%~zA

if %size% LSS %maxbytesize% (
    echo.File is ^< %maxbytesize% bytes
) ELSE (
    echo.File is ^>= %maxbytesize% bytes
)

但正如我在 cmets 中已经提到的,我不会依赖固定的文件大小,而是检查文件当前是否写入 = 已锁定,如 this SO thread 中所述)。

【讨论】:

以上是关于用于复制大于 700MB 的最新文件的批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

Windows批处理脚本实现批量复制文件并重命名

BAT批处理如何对大量文件夹进行批量RAR分卷压缩

使用批处理复制最新文件时出错

批处理脚本,用于复制FTP文件夹中的所有文件

批量复制及执行命令shell脚本

批处理脚本删除大于 50 GB 的 .ost