【问题标题】:batch file to keep N files in a directory based on date批处理文件,根据日期将 N 个文件保存在目录中
【发布时间】:2013-08-01 16:24:10
【问题描述】:

我正在寻找一种方法来将最新的 N 个文件保留在一个目录中,并删除旧的。

我通过 FTP 在一个文件夹 (Windows Server) 中获得了每日备份,我想只保留最后 3 个备份。这些备份有 2 个文件(第一个是 .tar.gz,第二个是 MySQL 转储 .sql)。

关键是这些备份可能不会在某些日子出现,所以我不想删除超过 3 天的文件。但是尽可能多地删除文件,只保留最新的 6 个文件(3 天的备份,一次 2 个文件)。

如何用 .bat 做到这一点?

提前致谢

【问题讨论】:

    标签: batch-file windows-server


    【解决方案1】:

    试试这个:

    for /f "tokens=1*delims=:" %%a in ('dir /b /a-d /o-d *.tar.gz *dump.sql 2^>nul^|findstr /n "^"') do if %%a gtr 6 echo del "%%~b" 
    

    【讨论】:

      【解决方案2】:

      比 Endoro 的回答更直截了当。这假定 .sql 和 .tar.gz 文件总是成对出现。

      for /f "skip=6 eol=: delims=" %%F in ('dir /b /a-d /o-d *.tar.gz *.sql') do del "%%F"
      

      解释:

      DIR 命令列出按最后修改时间戳降序排列的文件。在命令提示符下键入 help dirdir /? 以获取有关所有选项含义的文档。 FOR 命令处理结果。 SKIP 选项会跳过前 6 个文件,这些文件恰好是您想要保留的文件,因为它们排在最前面。剩余的文件名被传递给 DEL 命令。输入 help forfor /? 以获取有关 FOR 的文档 - 它有点像野兽,有很多选项。

      【讨论】:

      • 按预期工作。但是我无法理解该代码的任何内容:(但是可以这样:P非常感谢队友
      • @DarioEmerson - 添加了解释。如果您对答案感到满意,您应该通过单击左上角附近的复选标记来接受它。该动作让其他人知道该问题已被回答,它奖励您 2 个代表点,并奖励答案发布者 15 个代表点。每个问题只能接受一个答案。一旦达到 15 个代表点,您就有权对任何您认为有用的答案进行投票,甚至是对其他人问题的答案。投赞成票给回答者 10 分。
      猜你喜欢
      • 2012-02-20
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多