|
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 ]
|
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 |
|
|
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 |
|