【问题标题】:Windows batch file delete files older than X days but leave a min of X filesWindows 批处理文件删除超过 X 天的文件,但保留最少的 X 个文件
【发布时间】:2015-07-06 15:01:21
【问题描述】:

我看到过旧帖子,您可以在其中删除超过 X 天的文件,例如 Batch file to delete files older than N days。我想为此添加一个额外的过滤器,以便如果我正在运行的备份在 2 周内没有发生,那么它不会删除我的所有备份。

我知道这个:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"

您可以删除超过 X 天的内容,但我如何添加上述条件并让它在删除之前至少留下 Z 文件?

例子:

假设我想删除超过 14 天的文件,但至少保留 5 个文件和以下文件:

Jan 1 - backup1.zip
Jan 2 - backup2.zip
Jan 3 - backup3.zip
Jan 4 - backup4.zip
Jan 5 - backup5.zip
Jan 6 - backup6.zip
Jan 7-20 no backups done
Jan 21st - script runs and removed old files

使用删除所有超过 14 天的文件的示例代码,我的所有备份文件都将被删除,我将没有备份。我希望脚本看到只剩下 6 个文件,并且至少保留 5 个文件。

有意义吗?这可以通过windows批处理文件实现吗?

为了清晰

这是我的批处理文件的一部分:

cd /d %BKUPDIR%
FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.zip ^2^>nul') DO IF EXIST "%%~fA" ECHO "%%~fA" >>%LOGFILE%
FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.zip ^2^>nul') DO IF EXIST "%%~fA" DEL "%%~fA" >>%LOGFILE%
FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.log ^2^>nul') DO IF EXIST "%%~fA" ECHO "%%~fA" >>%LOGFILE%
FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.log ^2^>nul') DO IF EXIST "%%~fA" DEL "%%~fA" >>%LOGFILE%

这些文件是我要删除的 zip 和日志文件,它们都位于同一个文件夹中。

【问题讨论】:

  • 您要保留最新或最旧的文件吗?
  • @npocmaka 好问题,我想保留最新的文件。
  • 您的所有文件都位于同一个文件夹中还是可能位于子文件夹中?如果它们位于同一个文件夹中,是否还有其他文件/文件夹?
  • @CristiFati 我添加了其他信息,希望能回答您的问题。
  • 我查看了批处理文件,我认为它应该可以工作。 (完成后,您可以回显文件名并将其删除到相同的for)。

标签: windows batch-file


【解决方案1】:

此脚本将删除所有超过 14 天的 zip 和日志文件,保留至少 5 个最近的文件(总共 10 个),无论年龄大小。

请注意,FORFILES /D 选项基于上次修改日期,因此我没有使用创建日期来订购我的 DIR 命令。

FORFILES 命令非常慢,所以一旦我检测到一个超过 14 天的文件,我就不会再运行 FORFILES,因为我知道所有剩余的文件都是那个年龄或更早的文件。

@echo off
pushd "c:\yourBackupPath"
for %%X in (zip log) do (
  set "skip=1"
  for /f "skip=5 delims=" %%F in ('dir /b /a-d /o-d /tw *.%%X') do (
    if defined skip forfiles /d -14 /m "%%F" >nul 2>nul && set "skip="
    if not defined skip del "%%F" 
  )
)  

【讨论】:

  • tyvm 我试试看!
  • 似乎可以工作,但每次运行后我都找不到一个文件。我已经测试了几种方法,我应该担心吗?
  • 我无法想象“未找到文件”消息的来源,除非您缺少其中一种文件类型(.zip 或 .log)。如果这是错误消息的来源,那么你应该没问题(当然假设文件类型丢失是可以的)。
  • 啊,就是这样,目录中没有日志文件。感谢您的帮助!
  • 看起来像来自火星的胡言乱语,但有效。谢谢:-)
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多