写入批处理文件以删除每种类型的但最新的X个文件

时间:2018-11-13 14:28:40

标签: batch-file

我正在尝试创建一个应该每天运行一次的批处理文件,该文件应该删除除最新备份以外的所有备份文件,可以说每个类型2个。所以我有这样的文件:

  • backup-DAILY-2018-11-13_000000.bak
  • backup-DAILY-2018-11-12_000000.bak
  • backup-DAILY-2018-11-11_000000.bak

  • backup-HOURLY-2018-11-13_110000.bak

  • backup-HOURLY-2018-11-13_130000.bak
  • backup-HOURLY-2018-11-13_150000.bak

所以我的脚本当前如下所示

(P attend-projectile
   =goal>
      ISA         goal
      state       nil
   =visual-location>
        screen-x                =pos-x
        screen-y                =pos-y
   ?visual>
      state       free
==>
   +visual>
      cmd         move-attention
      screen-pos  =visual-location
   =goal>
      state       attended
      last-pos    (position pos-x screen-x pos-y screen-y)
)

但是我收到错误@ECHO off SET frequency=%* for %%x in (%frequency%) do ( for /f "*-%%x*" %%a in ('dir /ad /b /o-d^|more +2') do echo @file )

该脚本应该实现的是,每天运行一次后,我应该拥有每种类型的最新两个备份文件(DAILY,HOURLY)。现在,我只是在尝试打印需要保留的文件。

所以我应该留下的是

  • backup-DAILY-2018-11-13_000000.bak
  • backup-DAILY-2018-11-12_000000.bak

  • backup-HOURLY-2018-11-13_130000.bak

  • backup-HOURLY-2018-11-13_150000.bak

1 个答案:

答案 0 :(得分:1)

我不确定您要尝试达到的频率是什么,但是,尽管如此,我还是将重点放在您实际想要实现的目标上:

for /F "skip=2 eol=: delims=" %%i in ('dir /b /o-d *DAILY*') do echo "%%i"
for /F "skip=2 eol=: delims=" %%i in ('dir /b /o-d *HOURLY*') do echo "%%i"

所以发生的是,我们按相反的日期对日期进行排序,然后跳过前两个文件(是最新的),然后删除其余的文件,我们只对每种类型分别每小时和每天运行2个单独的循环。可以将其合并到单个for循环中,但是我认为这很简单。

确认您的功能符合您的要求后,显然用echo替换del