![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 17:46 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 怎样用聪明的小DOS命令解决烦人问题?!(DOS高手小考题) |
| 可打印版本 6,101 / 36 |
| 第16楼 Climbing | 发表于 2004-11-10 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你试试md a.b这个命令,就知道x不是多余的了,这也是程序严密性的体现。没有跟你争论的意思,只是提醒你要注意严密性,搞技术的一定要注意这一点。
|
|
| 第17楼 GOTOmsdos | 发表于 2004-11-10 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
我试过了,对带点的目录名,没有问题,我试了A.B.F这样的目录,都没问题,说明这个x确是管文件的扩展名的,而不是带点的目录名.因为我们的批处理的/d已经确定它是目录了..这个X就不起作用了
|
|
| 第18楼 Climbing | 发表于 2004-11-10 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
在我的试验中,如果不带x就不行的,假如C:盘中a目录,如果不带x,就会将D:盘的a.1 a.2等目录删除。
|
|
| 第19楼 Climbing | 发表于 2004-11-10 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
@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楼 GOTOmsdos | 发表于 2004-11-10 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
哦,我刚才没明白你的意思,又试了,确实如你所说,现在发现FOR命令 的解释(或者程序)本身有问题,它说是处理扩展名,其实是处理所有带点的(包括目录),我还发现,这个X解析带点的,只以最后一个点为界。有点的话,如果不加X,它就分析最后的点之前的全部,如果加X,就分析全部。所以,如果有多点,并且不加X,比如A.B.C,他也不会认为和A相同.总之,这是一个缺陷,完整的处理是:对目录一律包括点,处理目录应该当作一个整体,只有当分析文件时才分扩展.
|
|
| 第21楼 Climbing | 发表于 2004-11-11 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
无论是Windows还是Linux系统,文件和目录的命名规则都是一样的,处理方式也是相同的,所以这不是系统的缺陷,只是你的程序考虑的不够严密罢了。
|
|
| 第22楼 qzwqzw | 发表于 2004-11-11 00:00 |
| 银牌会员 发帖 636 积分 2,343 | |
|
Oh, Hit!!! 为了回复这个问题当机三次,想当个高手咋就这么难呢?dos我懂得不多,只记得学过一句,似乎跟这有些关系: for %%f in (d:\program\*.*) do if exist c:\%%f del c:\%%f不过用在这里好像不太行哦,是我的脑袋太笨,还是楼主的问题有问题?我总觉得,为什么不直接用dir看一下在哪,然后用deltree或者rd /s删除呢?怕删错还可以逐步确认呀。为什么一定要用那么长的for命令,还有那复杂的批处理?难道楼主你会一遍又一遍的把软件装错地方?有简单的不用,用复杂的,是一种罪过哦。所以,我到现在一直是用"查找"找到它,然后选中delete,方便快捷,没有后遗症。
|
|
| 第23楼 tired_bird | 发表于 2004-11-11 00:00 |
| 中级用户 发帖 58 积分 307 | |
|
看了这份贴,加深了for 语句的用法及功能的理解。同时从Climbing和GOTOmsdos身上学到很多东西,受益匪浅。不过好像Climbing关于“无论是Windows还是Linux系统,文件和目录的命名规则都是一样的,处理方式也是相同的”的说法我有点不同看法,linux下文件和目录的命名规则可以支持冒号:,而xp 下及cygwin中的bash中文件和目录的命名不支持冒号。
|
|
| 第24楼 insert | 发表于 2004-11-11 00:00 |
| 中级用户 发帖 52 积分 282 | |
|
同意22楼的说法,又不是每次都会解错地方,干吗要弄得那么复杂啊!!又没实际作用。
|
|
| 第25楼 GOTOmsdos | 发表于 2004-11-11 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
to qzwqzw你没看清我的要求,我要求之一是:就因为文件太多了,一个个的看,找,太麻烦啊! 所以用DIR是肯定不行的!for %%f in (d:\program\*.*) do if exist c:\%%f del c:\%%f你的以上方法可以精简成我的帖子中的答案。后面的要求再看后面的内容。。。
|
|
| 第26楼 GOTOmsdos | 发表于 2004-11-11 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
TO insert 当然不是每个DOS技术都是很常用的,但对于学习研究DOS者来说,这就是钻研的任务之一。但一旦你或你的朋友遇到类似情况,就会显示出DOS功底的力量了。。
|
|
| 第27楼 Climbing | 发表于 2004-11-12 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
以下是引用tired_bird在2004-11-11 21:00:11的发言: 我并不是说Windows 和 Linux的文件命名规则是一样的(Windows下当然会有很多限制),但在同一个系统下,文件和目录名的命名规则是一样的。 |
|
| 第28楼 bush | 发表于 2004-11-12 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
樓主說的:D:\PROGRAM>for %1 in (*) do del c:\%1 /s 不好。你必须保证你的压缩文件中的一级目录在C盘也是唯一的。壓縮文件中的一級目錄在c盤中必須唯一,且沒有其他同名文件。還是先定位好。
|
|
| 第29楼 bush | 发表于 2004-11-12 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
其實,dir/d 按時閒排序,再刪除解壓時節以後的文件即可,雖然多一個步驟但是可靠一些.
|
|
| 第30楼 GOTOmsdos | 发表于 2004-11-12 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
to bush
没错,必须确定C盘中其他地方没有同名文件,跟目录没有关系,这句只解决文件呀 我这些考题其实只是从理论上实现达到一种意图,如果真要操作的话,肯定要再加控制其他条件的语句的 |
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |