我们的备份系统每天都会创建.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
答案 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