[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
不知道有多海量,如果足够存路径名,也可以这样
  1. rem 得到每个路径下文件数
  2. for /r %%i in (*) do (
  3.      set /a #%~dpi+=1
  4. )
  5. rem 遍历路径,如果路径<10,搜索子路径,如果子路径下没有>=10的路径存在则删除,否者保留。
  6. for /f "tokens=1,2 delims==" %%a in ('set #') do (
  7.           if %%b lss 10 (
  8.                    set "flag="
  9.                    for /f "tokens=1,2 delims==" %%x in ('set #%%a') do (
  10.                               if %%y geq 10 set "flag=@"
  11.                    )
  12.                    if not defined flag rd /q "%%a"
  13.           )
  14. )
复制代码

TOP

dir /s /b |sort 的速度很慢。
for /r 的速度大于 for /f ('dir /s /b') 特别是海量时。
因为FOR必须等到 DIR | SORT 执行完毕,才从管道里读取输出,再一行一行执行FOR。
而FOR /R 是一边搜索文件,一边输出。

或许文件个数很多,但如果路径,也就是文件夹的个数不是特别多,那么用大量变量还是可以做到。


其实最快的方法不是我那个,应该是一边搜索,一边检测文件夹层次。
搜索到一个路径时,set %~dpi+=1,如果下一次的%~DPI不是上一次的子目录,那么就可以根据%~dpi的值确定是否删除了。
如果是,就继续记录路径。

如果文件夹的层次不超过32,而且for /r 搜索的规律性,可以用构建一个:函数
每次层次深入就setlocal 一次,每次检测到路径不是上一次的子目录,就endlocal一次,然后根据返回值确定是否删除该级目录。

TOP

返回列表