Windows .Bat文件-如果至少已有3天的文件存在,则删除4天的备份
这是我的第一篇文章&记住我的母语不是英语Windows .Bat文件-如果至少已有3天的文件存在,则删除4天的备份,windows,batch-file,cmd,backup,Windows,Batch File,Cmd,Backup,这是我的第一篇文章&记住我的母语不是英语 .bat到目前为止的文件: C: Cd\ forfiles /p Z:\SQL /s /m *.bak /d -4 /c "cmd /c del /q @path" forfiles /p Z:\SQL /s /m *.trn /d -4 /c "cmd /c del /q @path" 我想要此文件的内容: 我希望它删除4天以前的备份和日志文件。此.Bat文件与此配合使用-风险现在就来了-如果备份/日志程序因某种原因停止,并且负责人病了4天-此
.bat
到目前为止的文件:
C:
Cd\
forfiles /p Z:\SQL /s /m *.bak /d -4 /c "cmd /c del /q @path"
forfiles /p Z:\SQL /s /m *.trn /d -4 /c "cmd /c del /q @path"
我想要此文件的内容:
我希望它删除4天以前的备份和日志文件。此.Bat
文件与此配合使用-风险现在就来了-如果备份/日志程序因某种原因停止,并且负责人病了4天-此.Bat
文件将删除我仅有的有效备份
所以我的要求是:
是否有人知道如何在.bat
文件中切换,以便它查找至少3天的文件-请注意,不仅是3个文件,而且必须是前3天的连续文件
示例:系统星期一(1)进行备份,星期四(2)系统崩溃。当调度程序在星期二(4)运行备份时,它只会删除星期一备份(这是我唯一有效的备份),因为它已经运行了4天
这就是我想让它检查的地方:在过去的3天中,我是否有任何其他.bak
/.trn
文件是/否
否=不删除
是=删除超过4天的所有内容
希望我的解释能理解一些
谢谢你的阅读,希望你能帮助我 你可以提前数一数,做出决定。这里有一个方法。不幸的是,FORFILES不允许您轻松查找比4天前更新的文件,因此我们查找较旧的文件并从总数中减去 循环浏览文件并将符合删除条件的文件添加到文本文件:
forfiles /p Z:\SQL /s /m *.bak /d -4 /c "CMD /c ECHO @fname" > BAKfiles.tmp
forfiles /p Z:\SQL /s /m *.trn /d -4 /c "CMD /c ECHO @fname" > TRNfiles.tmp
接下来,使用FIND/c
命令来计算其中带有引号的行数,并使用FOR/F
来解析冒号后输出的总数。您需要为每种文件类型执行此操作,但我仅为常规表单显示一种
FOR /F %%C IN ('dir *.BAK^| find "File(s)"') do SET BAKTOTAL=%%C
FOR /F %%C IN ('dir *.TRN^| find "File(s)"') do SET TRNTOTAL=%%C
FOR /F "tokens=2* delims=:" %%C IN ('cmd /c find /c """" BAKfiles.tmp') DO SET BAKDEL=%%C
FOR /F "tokens=2* delims=:" %%C IN ('cmd /c find /c """" TRNfiles.tmp') DO SET TRNDEL=%%C
SET /A BAKCOUNT=%BAKTOTAL% - %BAKDEL%
SET /A TRNCOUNT=%TRNTOTAL% - %TRNDEL%
然后使用IF
评估计数,查看是否有足够的文件满足阈值,并运行删除命令
IF %BAKCOUNT% GEQ 3 IF %TRNCOUNT% GEQ 3 GOTO DELETEFILES
ECHO Not enough files were found. Skipping deletion.
GOTO ENDING
:DELETEFILES
forfiles /p Z:\SQL /s /m *.bak /d -4 /c "cmd /c del /q @path"
forfiles /p Z:\SQL /s /m *.trn /d -4 /c "cmd /c del /q @path"
:ENDING
del /q BAKfiles.tmp
del /q TRNfiles.tmp
我想你可以把这个问题减少到最多10行。