我正在尝试创建一个一行命令,它将获取所有与模式匹配的目录并删除其中一定数量的目录。
假设我有一个这样的目录:
C:/
tmp/
www/
01/
02/
03/
04/
05/
而且我只想保留最新的 2 个文件夹05
和04
。
我有一个 for 循环,可以输出所有文件夹,我遇到问题的部分是计数超过一定数量:
> for /f "tokens=*" %G in ('dir /b /a:d "C:\tmp\www\*"') do echo Found %G
Found 20161201004853
Found 20161201005125
Found 20161201005246
我尝试添加计数器,但我不知道如何分离命令,因为它们都在一行上。尽管我在 Google 上搜索了很多方法,但我希望这里有人知道。
与往常一样,如果有更好的方法来做到这一点,我也会接受。
答案1
这将删除除最后 2 个文件夹之外的所有文件夹(假设它们按字母顺序排列)
只需将该行放入 .cmd/.bat 文件中并在父文件夹内执行即可
。可以通过传递给命令的参数 (%1) 来控制文件数量。可以通过“dir /b /on”来控制删除最后一个或第一个文件夹
setlocal EnableDelayedExpansion & set x=0 & for /f %%f in ( 'dir /b /o-n' ) do ( set /a x+=1 & if !x! lss 3 rd /s/q %%f )