[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 不知道是谁 于 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码


注意备份,谨慎使用!
bat小白,请多指教!谢谢!

TOP

回复 1# 不知道是谁
各管各的挺好的,非要合成一个命令适得其反,搞得又复杂效率又低。

TOP

  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

评分人数

TOP

本帖最后由 /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. )
复制代码
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

本帖最后由 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
复制代码

TOP

Five66 发表于 2023-11-21 19:39



    测试可用,也能看明白,学习了

TOP

返回列表