如果文件至少存在N天,如何在批处理文件中指定不删除文件?

时间:2018-08-20 08:26:06

标签: batch-file

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

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

 @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小时,则最好使用一些限制文件再次运行的文件。但是我也不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望删除除最新的四个备份之外的所有备份,但前提是它们的使用期限最短(或更准确地说,如果它们早于特定天数被修改)。 br /> 以下代码正是这样做的:

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

答案 1 :(得分:0)

使用forfiles

forfiles /P "%backupDir%" /M *.* /D -10 /C "cmd /C echo @path"

您可以更改-10所在的天数。

仅当您100%确定回显了您要删除的正确文件时,才将echo更改为del

通过将*.*替换为文件扩展名或实际文件名,可以更详细地说明文件类型。即*.MYDbackup_db*

有关更多信息,请从forfiles /?运行cmd.exe

要将上面的行添加到脚本中,只需替换此行:

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

使用forfiles行。