中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: FOR 这样优化为什么不行? 上一主题 | 下一主题
313885174
中级用户





积分 206
发帖 100
注册 2007-7-9
状态 离线
『楼 主』:  FOR 这样优化为什么不行?

for /r c:\ %%i in (123456.txt) do del "%%i"
for /r d:\ %%i in (123456.txt) do del "%%i"
for /r e:\ %%i in (123456.txt) do del "%%i"
for /r f:\ %%i in (123456.txt) do del "%%i"
for /r g:\ %%i in (123456.txt) do del "%%i"



把上面的写成
for %%i in (c,d,e,f,g) do for /r %%u in (123456.txt) do del %%i:\"%%u"
这样的话P处理文件所在目录下对C D E F G查找  但后面的路径还是文件所在的原目录?

2008-3-14 14:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 2 楼』:  

你命令理解有误
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
路径是放在变量前面的,所以正确写法应该是这样:
for %x in (c,d,e,f,g) do for /r %x: %u in (*.txt) do @echo %u
[/code
但是这命令会出这错误:
此时不应有 %x:

究其原因可能是变量引用的区域性时效性问题,所以引入call替换成这样用应该就可以了:
[code]
for %%i in (c,d,e,f,g) do call :ssss %%i
pause&exit
:ssss
set driver=%1
for /r %driver%: %%u in (123456.txt) do del %%u
有没有更好看方法,就看楼下的朋友了xD

2008-3-14 16:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ngd
中级用户

拟谷盗


积分 312
发帖 108
注册 2007-1-21
状态 离线
『第 3 楼』:  

for /r 都可以用 for /f 代替
@echo off
for %%i in (c d e f g) do (
    for /f "delims=" %%j in ('"dir /a-d/b/s %%i:\123456.txt"') do del /f/q "%%j"
)
[ Last edited by ngd on 2008-3-14 at 05:34 PM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 313885174 分数: +2  时间:2008-3-14 18:49




FLOSS
2008-3-14 17:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
313885174
中级用户





积分 206
发帖 100
注册 2007-7-9
状态 离线
『第 4 楼』:  

2楼给的代码删不干净
3楼的测试可行


可以解释下这个是什么吗?
"delims="

[ Last edited by 313885174 on 2008-3-14 at 06:56 PM ]

2008-3-14 18:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ngd
中级用户

拟谷盗


积分 312
发帖 108
注册 2007-1-21
状态 离线
『第 5 楼』:  

for /f 语句中,默认以空格或者制表符(也就是按tab键产生的8个空格的字符)为分隔符
"delims=" 的含义是取消默认的分隔符
如果你去掉了delims选项,那么当文件含有空格等符号时,程序可能达不到你要的效果,甚至会出错。



FLOSS
2008-3-14 23:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 6 楼』:  

@echo off
for %%i in (c d e f g) do (if exist %%i:\123456.txt del /f /q %%i:\123456.txt)

2008-3-14 23:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 7 楼』:  

好像楼主要实现的功能不用这么麻烦吧,
用以下的就可以实现了,效率更高。

  Quote:
for %%i in (c,d,e,f,g) do del /f /s /q /a %%i:\123456.txt



   此帖被 +3 点积分       点击查看详情   
评分人:【 ngd 分数: +1  时间:2008-3-15 00:58
评分人:【 313885174 分数: +2  时间:2008-12-27 21:02




QQ:366840202
http://chenall.net
2008-3-15 00:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
313885174
中级用户





积分 206
发帖 100
注册 2007-7-9
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by suntb at 2008-3-14 11:49 PM:
@echo off
for %%i in (c d e f g) do (if exist %%i:\123456.txt del /f /q %%i:\123456.txt)

没有用啊以前试过了要是不在前面加if exist %%i:\123456.txt最多每个分区下会删除掉文件然而子文件夹下还是存在的``
.......................................................

[ Last edited by 313885174 on 2008-12-27 at 21:02 ]

2008-3-15 03:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
313885174
中级用户





积分 206
发帖 100
注册 2007-7-9
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by chenall at 2008-3-15 12:47 AM:
好像楼主要实现的功能不用这么麻烦吧,
用以下的就可以实现了,效率更高。

你的代码只能删除分区下的文件子目录好象删除不了把...

2008-3-15 03:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ngd
中级用户

拟谷盗


积分 312
发帖 108
注册 2007-1-21
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by 313885174 at 2008-3-15 03:13:

你的代码只能删除分区下的文件子目录好象删除不了把...

七楼的代码的确高效
因为 del 加了 /s 参数
----从当前目录及其所有子目录中删除指定文件。显示正在被删除的文件名。
我的代码更适合提取文件而非删除文件

LZ测试过了?



FLOSS
2008-3-15 12:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 11 楼』:  

学习了 忘了dir还有/s开关

2008-3-15 23:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: