中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [提问]如何删除除指定目录以外的所有目录?
楼 主 [提问]如何删除除指定目录以外的所有目录? 发表于 2006-09-28 08:27 ·  中国 广东 肇庆 电信
初级用户
积分 44
发帖 16
注册 2006-09-23 22:11
UID 63478
性别 男
来自 广东省
状态 离线
我想册除一个目录下面的文件夹和文件:
例如:目录F:\下面有3个文件夹1,2,3,我想保留这三个然后其它的全部册除!请各位高人多多提点本人不胜感激同时也为广大同等级的小辈们一个学习机会。:)



——————————俺是分割线——————————

*********************************
版务记录
*********************************
操作: 更改标题
原因: 原格式不符版规
原标题: 初入江湖,又遇大难题。请各位
功力深厚在大侠们进来帮帮戼/span>
执行: 3742668
处罚: 初犯,赦之。
备注: 1.建议发贴前看看置顶版规
2.如何更改标题?
点击所发贴右下角编辑——---------------------------------------------———————————★
按钮,然后进行编辑。 ↓
**********************************


[ Last edited by 3742668 on 2006-9-29 at 10:22 ]
2 发表于 2006-09-28 08:33 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
dir findstr /v del 我是这样想的
3 发表于 2006-09-28 09:19 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
UID 36626
性别 男
状态 离线
http://www.cn-dos.net/forum/viewthread.php?tid=23404&fpage=1


找个对你应该有帮助 结合楼上的 /v
4 发表于 2006-09-29 02:19 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
不光要/v还要/x:

@echo off
for /f "delims=" %%i in ('dir /ad /b f:\ ^| findstr /xiv "1 2 3"') do rd /s /q "f:\%%i"

1.建议把rd语句换成echo f:\%i先看看执行结果再确定是否删除。
2.以上代码未经测试。
参考链接:怎么写出这样的批处理..谢谢
5 发表于 2006-09-29 06:59 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
版主这个“X”参数玩得真漂亮~:)


C:\TEMP\t>findstr /?
在文件中寻找字符串。

FINDSTR

filename





先开始我以为这个X与V参数是有冲突的,结果试验普通目录(从目录名1建到10),结果发现不加/X参数与加了/X参数的效果一样,很奇怪。


后来键了带空格的“1 1”类似的目录以后,
才明白原来/V只打印不包含从“X打印完全匹配的行”里提到的匹配的行,
(就是/X提出完全匹配的行--目录名“1”,但目录名“1 1”不完全匹配所以不提)
然后由/V来决定滤掉由/X找到的完全匹配的数据行,
就相当于只有指定的目录名为”1“或”2“或”3“的目录不提取(就可以有排除的删了),
而”1 1“等中间带有空格的但也含有”1”字符的目录名由于受到了/X的完全匹配规则,
而也可以放在要删的行列了。


2006-09-28 18:36 <DIR> .
2006-09-28 18:36 <DIR> ..
2006-09-28 18:29 <DIR> 1
2006-09-28 18:36 <DIR> 1 1
2006-09-28 18:33 <DIR> 11
2006-09-28 18:29 <DIR> 2
2006-09-28 18:29 <DIR> 3
2006-09-28 18:34 <DIR> 4
2006-09-28 18:34 <DIR> 5
2006-09-28 18:34 <DIR> 6
2006-09-28 18:34 <DIR> 7




利害~:)
学到很多东西~:)
6 发表于 2006-09-29 07:02 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
越来越发现光看代码是没用的,
一边看一边分析也不行,
还要亲自再试一回,一边试一边想,才真学到东西了~:)
7 发表于 2006-09-29 09:37 ·  中国 广东 肇庆 电信
初级用户
积分 44
发帖 16
注册 2006-09-23 22:11
UID 63478
性别 男
来自 广东省
状态 离线
谢谢这么多位的指导我会借你们的思路去好好研究下的!
8 发表于 2006-09-29 22:24 ·  中国 江苏 苏州 电信
中级用户
★★
过度热情
积分 321
发帖 139
注册 2006-03-21 17:19
UID 52521
性别 男
状态 离线
@echo off
for /f "delims=" %%i in ('dir/ad/b') do (
if /i not "%%i" == "1" rd %%i
if /i not "%%i" == "2" rd %%i
if /i not "%%i" == "3" rd %%i
)

我在当前目录下执行批处理。为什么这样不行呢?。 它delete所有目录了。
知识在于不断积累
9 发表于 2006-09-29 22:31 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
Originally posted by piziliu2004 at 2006-9-29 10:24:
@echo off
for /f "delims=" %%i in ('dir/ad/b') do (
if /i not "%%i" == "1" rd %%i
if /i not "%%i" == "2" rd %%i
if /i not "%%i" = ...

当搜索到“1”时:if /i not "%%i" == "1" rd %%i,删除除“1”以外的文件夹(包含2、3)
当搜索到“2”时:if /i not "%%i" == "2" rd %%i,删除除“2”以外的文件夹(包含1、3)
当搜索到“3”时:if /i not "%%i" == "3" rd %%i,删除除“3”以外的文件夹(包含1、2)

想象还剩下什么???
10 发表于 2006-09-29 23:01 ·  中国 江苏 苏州 电信
中级用户
★★
过度热情
积分 321
发帖 139
注册 2006-03-21 17:19
UID 52521
性别 男
状态 离线
@echo off
for /f "delims=" %%i in ('dir/ad/b') do (
if /i "%%i" == "1" goto END
if /i "%%i" == "2" goto END
if /i "%%i" == "3" goto END
rd %%i
:END
)

还有怎么会包错了。
知识在于不断积累
11 发表于 2006-09-29 23:08 ·  中国 江苏 苏州 电信
中级用户
★★
过度热情
积分 321
发帖 139
注册 2006-03-21 17:19
UID 52521
性别 男
状态 离线
用这种方法实现。。。。。。成功
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir/ad/b') do (
set /a pathfolder=%%i
if !pathfolder! GTR 3 rd %%i
)

上面的问题: 批处理()里边不能用: 标注释么
知识在于不断积累
12 发表于 2006-09-30 00:39 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
两个单字节的“::”冒号
13 发表于 2006-09-30 02:06 ·  中国 江苏 苏州 电信
中级用户
★★
过度热情
积分 321
发帖 139
注册 2006-03-21 17:19
UID 52521
性别 男
状态 离线
这样?。不行。 能不详细指点一下代码
for /f "delims=" %%i in ('dir/ad/b') do (

if /i "%%i" == "1" goto :END
if /i "%%i" == "2" goto :END
if /i "%%i" == "3" goto :END
rd %%i
::END
)
知识在于不断积累
14 发表于 2006-09-30 02:27 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
注释是两个单字节的“::”冒号,标签才是一个单字节的“:”冒号
15 发表于 2006-09-30 02:52 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
UID 61449
来自 北京
状态 离线
@echo off
for /f "delims=" %%i in ('dir /ad /b') do (
if not "%%i"=="1" if not "%%i"=="2" if not "%%i"=="3" call :ii "%%i"
)
goto :eof

:ii
echo %1
goto :eof
我今后在论坛的目标就是做个超级坏人!!!
论坛跳转: