Bat文件仅在存在较年轻的文件时删除文件

时间:2017-12-20 09:45:45

标签: batch-file

我们的备份系统每天都会创建.bak文件,如果我们遇到问题,我们可以使用它来恢复文件。如果单独留下这些将填满我们的存储空间,所以我找到了一个批处理文件,我可以在创建新批处理文件后每天删除它们。

forfiles -p "c:\xxx\yyy" -s -m *.bak /D -2 /C "cmd /c del @path"

这很好但我想创建一个安全网,这样如果由于某种原因我们的备份系统失败并且没有创建新的.bak文件,旧的.bak文件将保留在那里而不是被删除,否则我们会在发生事故时没有备份文件。理想情况下,我想要一些能检查不到一天的.bak文件的东西,如果这些文件不存在,它将不会运行上面的行,但如果这些较年轻的文件存在,它将运行上面的行并删除旧文件。不确定是否可以使用批处理文件。在此先感谢您的帮助。

编辑:关于我需要的更多信息。每天晚上10点左右,大约会创建50个备份.bak文件,并将其放入文件夹c:\ xxx \ yyy 这些文件非常大,所以我设置了一个批处理文件,每天自动运行,删除所有超过1天的.bak个文件。这对于日常使用来说很好,但是如果备份系统因任何原因没有创建.bak文件,那么我脑海中的情况就是如此。我希望批处理文件检查以确保在删除旧文件之前已创建新的.bak文件。基本上使用批处理文件有一种方法可以检查文件夹中是否存在比1天更新的文件类型,并且可以根据结果更改批处理文件的作用。

这些是为18日和19日创建的文件的示例。

2004 Apr_backup_2017_12_18_210001_2986007.bak
2004 Apr_backup_2017_12_19_210001_3168635.bak
Subscribers_backup_2017_12_19_210003_3012893.bak
model_backup_2017_12_19_210003_2544131.bak

他们似乎都遵循以下格式:

[DESC]_backup_[YEAR]_[MONTH]_[DAY]_21000[1/2/3]_[7 DIGIT NO.].bak

1 个答案:

答案 0 :(得分:0)

这是一个未经测试的示例脚本,只要您没有[DESC]包含 _ 的文件名,该脚本就可以运行= 或其他有问题的人物。

@Echo Off
SetLocal DisableDelayedExpansion
For /F "Delims==" %%A In ('Set _[ 2^>Nul') Do Set "%%A="
If /I Not "%CD%"=="C:\xxx\yyy" (Set "_[:]=T"
    PushD "C:\xxx\yyy" 2>Nul||Exit /B)
For /F "Tokens=1* Delims=_" %%A In ('Dir /B /O-N *_backup_*_*_*_*_*.bak'
) Do If Defined _[%%A] (Del /A /F "%%A_%%B") Else Set "_[%%A]=T"
If Defined _[:] PopD
EndLocal
Exit /B