返回列表 发帖
不知道有多海量,如果足够存路径名,也可以这样
rem 得到每个路径下文件数
for /r %%i in (*) do (
     set /a #%~dpi+=1
)
rem 遍历路径,如果路径<10,搜索子路径,如果子路径下没有>=10的路径存在则删除,否者保留。
for /f "tokens=1,2 delims==" %%a in ('set #') do (
          if %%b lss 10 (
                   set "flag="
                   for /f "tokens=1,2 delims==" %%x in ('set #%%a') do (
                              if %%y geq 10 set "flag=@"
                   )
                   if not defined flag rd /q "%%a"
          )
)COPY

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

返回列表