中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 17:03
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样用聪明的小DOS命令解决烦人问题?!(DOS高手小考题) 查看 5,801 回复 36
16 发表于 2004-11-10 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
你试试md a.b这个命令,就知道x不是多余的了,这也是程序严密性的体现。没有跟你争论的意思,只是提醒你要注意严密性,搞技术的一定要注意这一点。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
17 发表于 2004-11-10 00:00 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
22年会员
UID 7105
性别 男
状态 离线
我试过了,对带点的目录名,没有问题,我试了A.B.F这样的目录,都没问题,说明这个x确是管文件的扩展名的,而不是带点的目录名.因为我们的批处理的/d已经确定它是目录了..这个X就不起作用了
18 发表于 2004-11-10 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
在我的试验中,如果不带x就不行的,假如C:盘中a目录,如果不带x,就会将D:盘的a.1 a.2等目录删除。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
19 发表于 2004-11-10 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
@echo off
:: testfor.bat 测试for命令及命令扩展
:: 功能:删除2目录下所有与1目录中重名的子目录
rd /s /q 1
rd /s /q 2
md 1\a
md 1\a.1
md 1\b
md 1\c
md 2\a
md 2\a.1
md 2\a.2
md 2\b
md 2\c
md 2\d
md 2\e
echo ================================================================
echo 目录 1 的内容:
echo ================================================================
dir /b 1
echo ================================================================
echo 目录 2 的内容:
echo ================================================================
dir /b 2
echo ================================================================
echo 运行第一个for命令之后(if %%~ni==%%~nj),目录2的内容变为:
for /d /r 1 %%i in (*) do for /d /r 2 %%j in (*) do if %%~ni==%%~nj rd /s /q %%j
echo ================================================================
dir /b 2
echo ================================================================
echo 注意:a.2目录被错误的删除了。
pause
echo.
echo ================================================================
echo 准备运行第二个for命令...
echo ================================================================
rd /s /q 1
rd /s /q 2
md 1\a
md 1\a.1
md 1\b
md 1\c
md 2\a
md 2\a.1
md 2\a.2
md 2\b
md 2\c
md 2\d
md 2\e
echo 目录 1 的内容:
echo ================================================================
dir /b 1
echo ================================================================
echo 目录 2 的内容:
echo ================================================================
dir /b 2
echo ================================================================
echo 运行第二个for命令之后(if %%~nxi==%%~nxj),目录2的内容变为:
for /d /r 1 %%i in (*) do for /d /r 2 %%j in (*) do if %%~nxi==%%~nxj rd /s /q %%j
echo ================================================================
dir /b 2
echo ================================================================
echo 看,a.2目录没有被删除。
echo.
echo ================================================================
echo 测试结果:目录名同样是有扩展名的。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
20 发表于 2004-11-10 00:00 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
22年会员
UID 7105
性别 男
状态 离线
哦,我刚才没明白你的意思,又试了,确实如你所说,现在发现FOR命令 的解释(或者程序)本身有问题,它说是处理扩展名,其实是处理所有带点的(包括目录),我还发现,这个X解析带点的,只以最后一个点为界。有点的话,如果不加X,它就分析最后的点之前的全部,如果加X,就分析全部。所以,如果有多点,并且不加X,比如A.B.C,他也不会认为和A相同.总之,这是一个缺陷,完整的处理是:对目录一律包括点,处理目录应该当作一个整体,只有当分析文件时才分扩展.
21 发表于 2004-11-11 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
无论是Windows还是Linux系统,文件和目录的命名规则都是一样的,处理方式也是相同的,所以这不是系统的缺陷,只是你的程序考虑的不够严密罢了。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
22 发表于 2004-11-11 00:00 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
Oh, Hit!!! 为了回复这个问题当机三次,想当个高手咋就这么难呢?dos我懂得不多,只记得学过一句,似乎跟这有些关系: for %%f in (d:\program\*.*) do if exist c:\%%f del c:\%%f不过用在这里好像不太行哦,是我的脑袋太笨,还是楼主的问题有问题?我总觉得,为什么不直接用dir看一下在哪,然后用deltree或者rd /s删除呢?怕删错还可以逐步确认呀。为什么一定要用那么长的for命令,还有那复杂的批处理?难道楼主你会一遍又一遍的把软件装错地方?有简单的不用,用复杂的,是一种罪过哦。所以,我到现在一直是用"查找"找到它,然后选中delete,方便快捷,没有后遗症。
23 发表于 2004-11-11 00:00 ·  中国 江苏 南京 秦淮区 电信
中级用户
★★
积分 307
发帖 58
注册 2004-10-21 00:00
21年会员
UID 32780
性别 男
状态 离线
看了这份贴,加深了for 语句的用法及功能的理解。同时从Climbing和GOTOmsdos身上学到很多东西,受益匪浅。不过好像Climbing关于“无论是Windows还是Linux系统,文件和目录的命名规则都是一样的,处理方式也是相同的”的说法我有点不同看法,linux下文件和目录的命名规则可以支持冒号:,而xp 下及cygwin中的bash中文件和目录的命名不支持冒号。
24 发表于 2004-11-11 00:00 ·  中国 广东 清远 电信
中级用户
★★
积分 282
发帖 52
注册 2004-09-29 00:00
21年会员
UID 31947
性别 男
状态 离线
同意22楼的说法,又不是每次都会解错地方,干吗要弄得那么复杂啊!!又没实际作用。
25 发表于 2004-11-11 00:00 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
22年会员
UID 7105
性别 男
状态 离线
to qzwqzw你没看清我的要求,我要求之一是:就因为文件太多了,一个个的看,找,太麻烦啊! 所以用DIR是肯定不行的!for %%f in (d:\program\*.*) do if exist c:\%%f del c:\%%f你的以上方法可以精简成我的帖子中的答案。后面的要求再看后面的内容。。。
26 发表于 2004-11-11 00:00 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
22年会员
UID 7105
性别 男
状态 离线
TO insert 当然不是每个DOS技术都是很常用的,但对于学习研究DOS者来说,这就是钻研的任务之一。但一旦你或你的朋友遇到类似情况,就会显示出DOS功底的力量了。。
27 发表于 2004-11-12 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
以下是引用tired_bird在2004-11-11 21:00:11的发言:

看了这份贴,加深了for 语句的用法及功能的理解。同时从Climbing和GOTOmsdos身上学到很多东西,受益匪浅。
不过好像Climbing关于“无论是Windows还是Linux系统,文件和目录的命名规则都是一样的,处理方式也是相同的”的说法我有点不同看法,linux下文件和目录的命名规则可以支持冒号:,而xp 下及cygwin中的bash中文件和目录的命名不支持冒号。

我并不是说Windows 和 Linux的文件命名规则是一样的(Windows下当然会有很多限制),但在同一个系统下,文件和目录名的命名规则是一样的。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
28 发表于 2004-11-12 00:00 ·  中国 重庆 渝中区 电信
银牌会员
★★★
积分 2,165
发帖 730
注册 2004-04-21 00:00
22年会员
UID 22966
性别 男
状态 离线
樓主說的:D:\PROGRAM>for %1 in (*) do del c:\%1 /s 不好。你必须保证你的压缩文件中的一级目录在C盘也是唯一的。壓縮文件中的一級目錄在c盤中必須唯一,且沒有其他同名文件。還是先定位好。
29 发表于 2004-11-12 00:00 ·  中国 重庆 渝中区 电信
银牌会员
★★★
积分 2,165
发帖 730
注册 2004-04-21 00:00
22年会员
UID 22966
性别 男
状态 离线
其實,dir/d 按時閒排序,再刪除解壓時節以後的文件即可,雖然多一個步驟但是可靠一些.
30 发表于 2004-11-12 00:00 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
22年会员
UID 7105
性别 男
状态 离线
to bush
没错,必须确定C盘中其他地方没有同名文件,跟目录没有关系,这句只解决文件呀



我这些考题其实只是从理论上实现达到一种意图,如果真要操作的话,肯定要再加控制其他条件的语句的

论坛跳转: