返回列表 发帖
本帖最后由 aloha20200628 于 2022-12-2 11:49 编辑

假设当前目录下有多个一级子目录,名如 2022-09-11,2022-10-28,...
指定一个期限,格式如 2022-09-11,其中前导零不能省略,
则如下代码被运行后,会删除早于或等于 2022-09-11 的全部一级子目录。
备注》dir /b/ad/tc/od 参数中的 tc 表示按目录创建日期排序 改为 tw 则表示按目录最后修改日期排序,od 表示升序 o-d 表示降序,本代码须用 od。

楼主可先用模拟样本试用一下。删除目录还须慎重。

  1. @echo off
  2. set/p "qd=指定目录的删除期限(格式如2022-09-01 早于或等于此限均被删除): "
  3. if not defined qd exit/b
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%F in ('dir /b/ad/tc/od 20??-??-??') do (
  6.     set "d8=%%~nF"
  7.     if "!d8!" leq "%qd%" (rd /s /q "%%F") else (endlocal &exit/b)
  8. )
  9. endlocal &exit/b
复制代码

TOP

如果不用tc或/tw排序,代码还可简化如下...
  1. @echo off
  2. set "qd=" &set/p "qd=指定目录的删除期限(格式如2022-09-01 早于或等于此限均被删除): "
  3. if not defined qd exit/b
  4. for /f "delims=" %%F in ('dir /b/ad/od 20??-??-??') do (
  5.     if "%%~nF" leq "%qd%" (rd /s /q "%%F")
  6. )
  7. exit/b
复制代码

TOP

请确认以下三点》
一、目录名须是 20??-??-?? 十位带前导零的格式
二、变量qd的输入值格式也须如上所述,且不能用双引号包裹
三、请用最新的简化版代码

TOP

本帖最后由 aloha20200628 于 2024-6-13 09:46 编辑

回复 23# wanyouxi520w

若楼主备份目录中只有形如 mmddyyyy 日期格式的目录,可用更简化的代码如下...
代码现状是检测版,如检测无误,可删除第3行代码中 echo, 即改为实际删除版。
如删除日期项不包含第7天,可修改代码第3行中 leq 为 lss 即可.
  1. @echo off &for /f %%d in (' powershell "(get-date).adddays(-7).tostring("""yyyyMMdd""")" ') do (set "days=%%d")
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%D in ('dir /b/ad ????????') do set "d=%%~nD"&if "!d:~4!!d:~,4!" leq "%days%" (echo,rd /q/s "%%D")
  4. endlocal&pause&exit/b
复制代码

TOP

本帖最后由 aloha20200628 于 2024-6-13 09:41 编辑


29楼所言极是,比较 mmddyyyy 格式的日期要排这个雷... 已订正25楼代码。

TOP

返回列表