|
本帖最后由 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%
- @ECHO OFF
- setlocal ENABLEDELAYEDEXPANSION
- mode con: cols=65 lines=25
- color 0A
- set "testDir=testDir"
- rd /s /q %testDir% >nul 2>&1
- mkdir %testDir%
- cd /d %testDir%
- mkdir Dir1
- ::开始测试====================
- call :dirlist listPre
- mkdir Dir2
- call :dirlist listLater
- rem 删除不同文件夹,删除相同文件夹使用:call :delDir true
- call :delDir false
- ::结束测试====================
- echo 运行前文件夹:%listPre%
- echo 运行后文件夹:%listLater%
- echo.
- pause
- ::结束批处理
- ::======================
- goto :EOF
- :dirlist
- set listTemp=<nul
- FOR /F "usebackq tokens=* delims=" %%i in (`dir *.* /B /A:D`) do (
- set "listTemp=%%i/!listTemp!"
- )
- set "%~1=%listTemp%"
- goto :EOF
- ::======================
- goto :EOF
- :delDir
- set listLaterloop=%listLater%
- :delDir0
- FOR /F "usebackq tokens=1* delims=/" %%i in ( `echo !listLaterloop!` ) do (
- if defined listLaterloop (
- set "i=%%i"
- set "j=%%j"
-
- set "listPreloop=%listPre%"
- set "found=false"
- :delDir1
- FOR /F "usebackq tokens=1* delims=/" %%k in ( `echo !listPreloop!` ) do (
- if defined listPreloop (
- if !i!==%%k set "found=true"
- set "listPreloop=%%l" &goto :delDir1
- )
- )
- if !found!==%~1 rd /s /q !i! && echo 已删除文件夹:!i!
- set "listLaterloop=!j!" &goto :delDir0
- )
- )
- goto :EOF
- ::======================
复制代码 |
|