找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24128|回复: 6

[文件操作] 【已解决】请教批处理保留匹配的文件夹并删除其他文件夹的问题

[复制链接]
发表于 2023-11-21 10:50:53 | 显示全部楼层 |阅读模式
本帖最后由 不知道是谁 于 2023-11-23 12:43 编辑

temp文件夹下有若干文件夹,只保留txt文件夹
txt文件夹下有若干文件夹,只保留下一层目录内有以bak结尾的文件夹
比如路径是 d:\test\temp\txt\1\bat-bak 则保留
路径是 d:\test\temp\txt\2\bat-tmp 则删除

这两条命令能合并成一条吗?或者有没有其他更好的方法,仅限批处理
  1. @echo off

  2. set path1=d:\test\temp
  3. set path2=d:\test\temp\txt

  4. for /f "delims=" %%i in ('dir /ad /b "%path1%"') do (
  5.     if not "%%i"=="txt" rd /s /q "%path1%\%%i"
  6. )

  7. for /f "delims=" %%i in ('dir /ad /b "%path2%"') do (
  8.     if not exist "%path2%\%%i\*bak" rd /s /q "%path2%\%%i"
  9. )

  10. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-11-21 14:02:23 | 显示全部楼层
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "d:\test\temp" ||exit
  4. for /d %%d in (*) do (
  5.         if /i "%%d" neq "txt" (
  6.                 rd /s /q "%%d"
  7.         ) else (
  8.                 for /d %%e in ("%%d\*") do (
  9.                         if not exist "%%e\*bak" (
  10.                                 rd /s /q "%%e"
  11.                         )
  12.                 )
  13.         )
  14. )
  15. pause
复制代码


注意备份,谨慎使用!
发表于 2023-11-21 14:13:02 | 显示全部楼层
回复 1# 不知道是谁
各管各的挺好的,非要合成一个命令适得其反,搞得又复杂效率又低。
发表于 2023-11-21 19:39:38 | 显示全部楼层

  1. @echo off

  2. set path1=d:\test\temp

  3. for /d %%a in ("%path1%\*" "%path1%\txt\*") do (
  4. if "%%~dpa" == "%path1%" (
  5. if not "%%~na" == "txt" rd /s /q "%%a"
  6. ) else (
  7. if not exist "%%a\*bak" rd /s /q "%%a"
  8. )
  9. )
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
不知道是谁 + 1 牛逼

查看全部评分

发表于 2023-11-21 23:36:35 | 显示全部楼层
本帖最后由 /zhqsystem/zhq 于 2023-11-21 23:39 编辑
  1. for /f "delims=" %%i in ('dir/a-d/s/b ".\bat-*.*"')do if /i not "%%~nxi"=="%~nx0" for /f "delims=" %%j in ("%%~fi\..")do for /f "delims=" %%k in ("%%~fj\..\..")do (
  2. if not defined # set "#=1"&for /f "delims=" %%l in ('dir/ad/b "%%~fk"')do if /i not "%%~nxl"=="TXT" echo,rd/s/q "%%~fk\%%~nxl"
  3. if /i "%%~nxi"=="bat-bak" echo,保留:        %%~fi
  4. if /i "%%~nxi"=="bat-tmp" echo,删除:del/q "%%~fi"&&echo,del/q "%%~fj\*.*"&&echo,rd/q "%%~fj"
  5. )
复制代码
发表于 2023-11-22 14:25:13 | 显示全部楼层
本帖最后由 aloha20200628 于 2023-11-22 14:38 编辑


根据路径串联的原则,排除与指定路径无串联关系的所有旁支路径...
调用findstr是为保全 *bat-bak\* 的子文件夹
脚本代码设定初始文件夹为 d:\test\temp
当前脚本为验证版本,若验证结果无误,可删除第11行前缀 'REM 实用版本》',再删除9-10行,改为实用版本。

  1. @echo off &setlocal enabledelayedexpansion
  2. cd /d "d:\temp\tmp"
  3. for /f "delims=" %%d in ('dir/b/s/ad *bat-bak') do (set/a "n+=1" &set _!n!=%%d)
  4. for /f "delims=" %%d in ('dir/b/s/ad^|findstr /ivc:"bat-bak" ') do (
  5.         set "keep=0" &for /L %%i in (1,1,!n!) do (
  6.                 set "_d=!_%%i!"
  7.                 if /i "!_d:%%d=!" neq "!_d!" (set "keep=1")
  8.         )
  9.         REM 验证版本
  10.         if !keep! equ 0 (echo,删除》%%d) else (echo,保留》%%d)
  11.         REM 实用版本》if !keep! equ 0 (rd /s/q "%%d"2>nul)
  12. )
  13. endlocal&exit/b
复制代码
 楼主| 发表于 2023-11-23 12:48:11 | 显示全部楼层
Five66 发表于 2023-11-21 19:39



    测试可用,也能看明白,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:42 , Processed in 0.012430 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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