用于复制大于 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 的最新文件的批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章