无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2867|回复: 1
打印 上一主题 下一主题

删除不同/相同文件夹 批处理

[复制链接]
跳转到指定楼层
1#
发表于 2017-12-11 14:06:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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. ::======================
复制代码
2#
发表于 2017-12-12 13:55:16 | 只看该作者
支持,最好来个说明。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-23 09:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表