我有两个参数。有人建议,这是一个重复的问题,但我想指定一个最小期限和一个最小文件数。我不确定如何组合这些参数。
我有一个包含以下代码的批处理文件:
@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小时,则最好使用一些限制文件再次运行的文件。但是我也不知道该怎么做。
答案 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
。
通过将*.*
替换为文件扩展名或实际文件名,可以更详细地说明文件类型。即*.MYD
或backup_db*
等
有关更多信息,请从forfiles /?
运行cmd.exe
要将上面的行添加到脚本中,只需替换此行:
for /f "skip=4 delims=" %%a in ('dir "%backupDir%\" /b /a-d /o:-d') do del "%backupDir%\%%a"
使用forfiles
行。