无忧启动论坛

标题: 删除不同/相同文件夹 批处理 [打印本页]

作者: lintrainwy    时间: 2017-12-11 14:06
标题: 删除不同/相同文件夹 批处理
本帖最后由 comzhongwy 于 2017-12-12 14:02 编辑

此方法不生成中间文件,缺点是代码略多,但已封装,使用方便



文件夹列表变量为单行文本,文件名之间以 “/” 为分隔符,形如:文件夹1/文件夹2/文件夹3/


call :dirlist listPre                ——保存 运行前文件夹列表 到变量 listPre
call :dirlist listLater                ——保存 运行后文件夹列表 到变量 listLater

call :delDir false                          ——删除不同文件夹
call :delDir true                          ——删除相同文件夹

运行前文件夹列表变量:%listPre%
运行后文件夹列表变量:%listLater%


  1. @ECHO OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. mode con: cols=65 lines=25
  4. color 0A

  5. set "testDir=testDir"
  6. rd /s /q %testDir% >nul 2>&1
  7. mkdir %testDir%
  8. cd /d %testDir%
  9. mkdir Dir1

  10. ::开始测试====================

  11. call :dirlist listPre
  12. mkdir Dir2
  13. call :dirlist listLater

  14. rem 删除不同文件夹,删除相同文件夹使用:call :delDir true
  15. call :delDir false

  16. ::结束测试====================

  17. echo 运行前文件夹:%listPre%
  18. echo 运行后文件夹:%listLater%
  19. echo.
  20. pause

  21. ::结束批处理
  22. ::======================
  23. goto :EOF
  24. :dirlist
  25. set listTemp=<nul
  26. FOR /F "usebackq tokens=* delims=" %%i in (`dir *.*  /B /A:D`) do (
  27.         set "listTemp=%%i/!listTemp!"
  28. )
  29. set "%~1=%listTemp%"
  30. goto :EOF
  31. ::======================
  32. goto :EOF
  33. :delDir
  34. set listLaterloop=%listLater%
  35. :delDir0
  36. FOR /F "usebackq tokens=1* delims=/" %%i in ( `echo !listLaterloop!` ) do (
  37.         if defined listLaterloop (
  38.                 set "i=%%i"
  39.                 set "j=%%j"
  40.        
  41.                 set "listPreloop=%listPre%"
  42.                 set "found=false"
  43.                 :delDir1
  44.                 FOR /F "usebackq tokens=1* delims=/" %%k in ( `echo !listPreloop!` ) do (
  45.                         if defined listPreloop (
  46.                                 if !i!==%%k set "found=true"
  47.                                 set "listPreloop=%%l" &goto :delDir1
  48.                         )
  49.                 )
  50.                 if !found!==%~1 rd /s /q !i! && echo 已删除文件夹:!i!
  51.                 set "listLaterloop=!j!" &goto :delDir0
  52.         )
  53. )
  54. goto :EOF
  55. ::======================
复制代码

作者: 少马石    时间: 2017-12-12 13:55
支持,最好来个说明。




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3