如果根目录中有 3 个以上的文件夹,则批处理文件删除最旧的文件夹
Batch file delete oldest folder if there are more than 3 folders in root
我现在有一个批处理文件,其中所有超过 22 天的文件夹都将被删除。当批处理文件每周运行时没有问题,根目录下总是有四个文件夹。
但是当有假期时,系统最多关闭三个星期。当文件在那个假期后运行时,将删除三个文件夹。
我现在正在寻找一个只删除最旧文件夹的命令,所以我会保留四个文件夹随时备份。
文件夹的命名方式类似于 backup_YYYY-MM-DD
。
通过使用以下批处理代码或多或少的单个命令行,可以轻松完成此任务:
@echo off
for /F "skip=4 eol=| delims=" %%I in ('dir "C:\Temp\backup_????-??-??" /AD /B /O-N 2^>nul') do rd /Q /S "C:\Temp\%%I"
命令 DIR returns 因为选项 /AD
只是目录名(属性目录)因为选项 /B
和由于在目录 C:\Temp
中找到的选项 /O-N
的名称与通配符模式 backup_????-??-??
.
匹配,因此按名称反向排序
如果在文件夹名称中使用日期格式 YYYY-MM-DD
,按名称倒序也会自动按日期倒序。通过命令DIR.
,最新的备份文件夹的名称最先输出,最旧的文件夹的名称最后输出
命令 FOR 跳过命令 DIR 输出的前四行,因此忽略了四个最新的备份文件夹。所有其他备份文件夹由 FOR 处理,导致使用命令 RD 删除它们。如果 DIR 找不到至少五个名称与模式 backup_????-??-??
匹配的文件夹,则 FOR 无需处理任何内容。所以总是至少有四个备份文件夹,除非用户手动删除备份文件夹。
命令 DIR 如果找不到与模式 backup_????-??-??
匹配的任何文件夹,则向 STDERR 输出一条错误消息. 2>nul
通过将错误消息从 STDERR 重定向到设备 NUL 来抑制此错误消息。重定向运算符 >
必须在此处使用 ^
转义,否则 Windows 命令处理器会将 >
解释为命令 FOR
定位错误的重定向,这将导致语法错误消息。
注意:命令DIR returns这里只是没有路径的备份文件夹名称,因此父文件夹路径必须在代码中写两次,在命令DIR 以及命令 RD.
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
dir /?
for /?
rd /?
另请参阅有关 Using command redirection operators 的 Microsoft 文档。
我现在有一个批处理文件,其中所有超过 22 天的文件夹都将被删除。当批处理文件每周运行时没有问题,根目录下总是有四个文件夹。 但是当有假期时,系统最多关闭三个星期。当文件在那个假期后运行时,将删除三个文件夹。
我现在正在寻找一个只删除最旧文件夹的命令,所以我会保留四个文件夹随时备份。
文件夹的命名方式类似于 backup_YYYY-MM-DD
。
通过使用以下批处理代码或多或少的单个命令行,可以轻松完成此任务:
@echo off
for /F "skip=4 eol=| delims=" %%I in ('dir "C:\Temp\backup_????-??-??" /AD /B /O-N 2^>nul') do rd /Q /S "C:\Temp\%%I"
命令 DIR returns 因为选项 /AD
只是目录名(属性目录)因为选项 /B
和由于在目录 C:\Temp
中找到的选项 /O-N
的名称与通配符模式 backup_????-??-??
.
如果在文件夹名称中使用日期格式 YYYY-MM-DD
,按名称倒序也会自动按日期倒序。通过命令DIR.
命令 FOR 跳过命令 DIR 输出的前四行,因此忽略了四个最新的备份文件夹。所有其他备份文件夹由 FOR 处理,导致使用命令 RD 删除它们。如果 DIR 找不到至少五个名称与模式 backup_????-??-??
匹配的文件夹,则 FOR 无需处理任何内容。所以总是至少有四个备份文件夹,除非用户手动删除备份文件夹。
命令 DIR 如果找不到与模式 backup_????-??-??
匹配的任何文件夹,则向 STDERR 输出一条错误消息. 2>nul
通过将错误消息从 STDERR 重定向到设备 NUL 来抑制此错误消息。重定向运算符 >
必须在此处使用 ^
转义,否则 Windows 命令处理器会将 >
解释为命令 FOR
定位错误的重定向,这将导致语法错误消息。
注意:命令DIR returns这里只是没有路径的备份文件夹名称,因此父文件夹路径必须在代码中写两次,在命令DIR 以及命令 RD.
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
dir /?
for /?
rd /?
另请参阅有关 Using command redirection operators 的 Microsoft 文档。