首页 > 解决方案 > 如果文件不是至少 N 天,如何在批处理文件中指定不删除文件?

问题描述

我有两个参数。有人建议这是一个重复的问题,但我想指定最小年龄和要保留的最小文件数。我不确定如何组合这些参数。

我有一个包含以下代码的批处理文件:

 @echo off

set "backupDir=[BACKUP DIR PATH HERE]"

copy /Y "[PATH OF FILE TO BE COPIED]" "[PATH WHERE BACKUP IS SAVED]"

for /f "skip=4 delims=" %%a in ('dir "%backupDir%\" /b /a-d /o:-d') do del "%backupDir%\%%a"

它创建数据库的备份并删除除四个最近实例之外的所有内容。我想要的是确保如果批处理文件在一天中运行不止一次,我最终不会删除旧文件并最终得到四个基本上是相同备份的副本。

如何指定文件必须在删除前至少“N”天?

如果自上次以来还没有至少 24 小时,那么最好有一些限制文件再次运行的东西。但我也不知道该怎么做。

标签: batch-file

解决方案


如果我理解正确,您想删除除最新的四个备份之外的所有备份,但前提是它们具有最小年龄(或者更准确地说,如果它们在一定天数之前被修改)。
以下代码正是这样做的:

pushd "%backupDir%" || exit 1
rem // Iterate files but skip the four ones that have been modified most recently:
for /F "skip=4 delims=" %%F in ('dir /B /A:-D /O:-D "*.*"') do (
    rem // Verify whether the last modification date is at least seven days ago:
    for /F "delims=" %%I in ('
        2^> nul forfiles /P "%%~dpF." /M "%%~nxF" /D -7 /C "cmd /C echo @path"
    ') do (
        ECHO del "%%I"
    )
)
popd

ECHO验证正确的输出后删除大写字母。


推荐阅读