标题: [文件操作] 【已解决】请教批处理保留匹配的文件夹并删除其他文件夹的问题 [打印本页]
作者: 不知道是谁 时间: 2023-11-21 10:50 标题: 【已解决】请教批处理保留匹配的文件夹并删除其他文件夹的问题
本帖最后由 不知道是谁 于 2023-11-23 12:43 编辑
temp文件夹下有若干文件夹,只保留txt文件夹
txt文件夹下有若干文件夹,只保留下一层目录内有以bak结尾的文件夹
比如路径是 d:\test\temp\txt\1\bat-bak 则保留
路径是 d:\test\temp\txt\2\bat-tmp 则删除
这两条命令能合并成一条吗?或者有没有其他更好的方法,仅限批处理- @echo off
-
- set path1=d:\test\temp
- set path2=d:\test\temp\txt
-
- for /f "delims=" %%i in ('dir /ad /b "%path1%"') do (
- if not "%%i"=="txt" rd /s /q "%path1%\%%i"
- )
-
- for /f "delims=" %%i in ('dir /ad /b "%path2%"') do (
- if not exist "%path2%\%%i\*bak" rd /s /q "%path2%\%%i"
- )
-
- pause
复制代码
作者: 77七 时间: 2023-11-21 14:02
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "d:\test\temp" ||exit
- for /d %%d in (*) do (
- if /i "%%d" neq "txt" (
- rd /s /q "%%d"
- ) else (
- for /d %%e in ("%%d\*") do (
- if not exist "%%e\*bak" (
- rd /s /q "%%e"
- )
- )
- )
- )
- pause
复制代码
注意备份,谨慎使用!
作者: qixiaobin0715 时间: 2023-11-21 14:13
回复 1# 不知道是谁
各管各的挺好的,非要合成一个命令适得其反,搞得又复杂效率又低。
作者: Five66 时间: 2023-11-21 19:39
- @echo off
-
- set path1=d:\test\temp
-
- for /d %%a in ("%path1%\*" "%path1%\txt\*") do (
- if "%%~dpa" == "%path1%\" (
- if not "%%~na" == "txt" rd /s /q "%%a"
- ) else (
- if not exist "%%a\*bak" rd /s /q "%%a"
- )
- )
- pause
复制代码
作者: /zhqsystem/zhq 时间: 2023-11-21 23:36
本帖最后由 /zhqsystem/zhq 于 2023-11-21 23:39 编辑
- 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 (
- 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"
- if /i "%%~nxi"=="bat-bak" echo,保留: %%~fi
- if /i "%%~nxi"=="bat-tmp" echo,删除:del/q "%%~fi"&&echo,del/q "%%~fj\*.*"&&echo,rd/q "%%~fj"
- )
复制代码
作者: aloha20200628 时间: 2023-11-22 14:25
本帖最后由 aloha20200628 于 2023-11-22 14:38 编辑
根据路径串联的原则,排除与指定路径无串联关系的所有旁支路径...
调用findstr是为保全 *bat-bak\* 的子文件夹
脚本代码设定初始文件夹为 d:\test\temp
当前脚本为验证版本,若验证结果无误,可删除第11行前缀 'REM 实用版本》',再删除9-10行,改为实用版本。
- @echo off &setlocal enabledelayedexpansion
- cd /d "d:\temp\tmp"
- for /f "delims=" %%d in ('dir/b/s/ad *bat-bak') do (set/a "n+=1" &set _!n!=%%d)
- for /f "delims=" %%d in ('dir/b/s/ad^|findstr /ivc:"bat-bak" ') do (
- set "keep=0" &for /L %%i in (1,1,!n!) do (
- set "_d=!_%%i!"
- if /i "!_d:%%d=!" neq "!_d!" (set "keep=1")
- )
- REM 验证版本
- if !keep! equ 0 (echo,删除》%%d) else (echo,保留》%%d)
- REM 实用版本》if !keep! equ 0 (rd /s/q "%%d"2>nul)
- )
- endlocal&exit/b
复制代码
作者: 不知道是谁 时间: 2023-11-23 12:48
Five66 发表于 2023-11-21 19:39
测试可用,也能看明白,学习了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |