我现在有一个批处理文件,其中所有早于22天的文件夹都将被删除。当批处理文件每周运行没有问题时,根目录中总会有4个文件夹。 但是当有假期时,系统会被关闭长达3周。在该假日之后文件运行时,将删除3个文件夹。
我现在正在搜索一个只删除最旧文件夹的命令,所以我会一直保留4个文件夹进行备份。
文件夹命名为backup_YYYY-MM-DD。
感谢您查看我的问题。
答案 0 :(得分:3)
使用以下批处理代码可以使用或多或少的命令行轻松完成此任务:
@echo off
for /F "skip=3 delims=" %%I in ('dir "C:\Temp\backup_*" /AD /B /O-N 2^>nul') do rd /Q /S "C:\Temp\%%I"
命令 DIR 返回,因为/AD
由于/B
而只返回裸格式的目录名称,并且由于目录/O-N
而按名称反向排序{1}}以名称C:\Temp
开头。
按名称的相反顺序会导致日期格式backup_
自动按日期顺序排列。首先输出最新的备份文件夹,最后输出最旧的文件夹 DIR 。
命令 FOR 会跳过命令 DIR 的前3行输出,因此会忽略3个最新的备份文件夹。所有其他备份文件夹均由 FOR 处理,导致使用 RD 命令将其删除。
命令 DIR 会向 STDERR 输出错误消息,如果它找不到与模式YYYY-MM-DD
匹配的任何文件夹。通过将错误消息从 STDERR 重定向到设备 NUL ,backup_*
会阻止此错误消息。必须使用2>nul
在此处转义重定向运算符>
,否则Windows命令解释程序会将^
解释为错误的命令>
的重定向,这将导致语法错误消息。
注意:命令 DIR 只返回没有路径的备份文件夹名称,因此父文件夹路径必须在代码中写入两次,命令 DIR 以及命令的 RD 强>
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
FOR
echo /?
dir /?
for /?
另请参阅Microsoft文章Using command redirection operators。