无忧启动论坛
标题:
删除不同/相同文件夹 批处理
[打印本页]
作者:
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%
@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
::======================
复制代码
作者:
少马石
时间:
2017-12-12 13:55
支持,最好来个说明。
欢迎光临 无忧启动论坛 (http://wuyou.net./)
Powered by Discuz! X3.3