中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 这是for/r的bug吗 上一主题 | 下一主题
daowuwei
新手上路





积分 10
发帖 4
注册 2007-11-19
状态 离线
『楼 主』:  这是for/r的bug吗

代码如下:
@echo off
setlocal enabledelayedexpansion
set a=0
for /r d:\test %%i in (*) do (
        set/a a+=1
        ren "%%i"  !a!-"%%~nxi"
)
pause
我的意图是将d:\test中的所有文件排序,但是当文件数过大时(我测试最大为6)以上代码不能如愿。希望大家帮忙看看是什么原因,谢谢!

2008-1-8 12:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

不是bug,你想如何排序呢?

2008-1-8 13:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
daowuwei
新手上路





积分 10
发帖 4
注册 2007-11-19
状态 离线
『第 3 楼』:  回复lxmxn

首先,感谢版主对此问题的回应。
或许时间原因,版主似乎并没有认真看过我的代码(也许是太简单的缘故)。但也许是我表述的不好,所以我再啰嗦一遍,希望能说清楚:我的代码的本意是将d:\test中的所有文件依次依序重命名,如下例子:
原文件名:a.txt,b.txt,c.txt,d.txt.......
重命名:1-a.txt,2-b.txt,3-c.txt,4-d.txt.....
但是当d:\test中的文件数超过6个以后,问题就来了。具体问题希望大家copy and run。
不知说清楚没有.......

2008-1-8 18:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
balinger
中级用户




积分 356
发帖 115
注册 2004-7-27
状态 离线
『第 4 楼』:  

我测试文件数十几个都可以的,怪了,为何楼主不能超过6个。

2008-1-8 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  回复daowuwei

不好意思,先前没有测试。

测试之后发现果然有bug,但我测试的结果视乎和你不一样,原文件名是“file1.txt”到“file50”,修改之后,却成了下面这样的:

  Quote:
1-file1.txt
2-file2.txt
3-file3.txt
4-file4.txt
5-file5.txt
6-file6.txt
7-file7.txt
8-file8.txt
9-file9.txt
12-file12.txt
14-file14.txt
16-file16.txt
18-file18.txt
20-file20.txt
22-file22.txt
24-file24.txt
26-file26.txt
28-file28.txt
30-file30.txt
32-file32.txt
34-file34.txt
36-file36.txt
38-file38.txt
40-file40.txt
42-file42.txt
44-file44.txt
46-file46.txt
48-file48.txt
50-file50.txt
52-11-file11.txt
54-15-file15.txt
55-17-file17.txt
57-21-file21.txt
58-23-file23.txt
60-27-file27.txt
61-29-file29.txt
63-33-file33.txt
64-35-file35.txt
66-39-file39.txt
67-41-file41.txt
69-45-file45.txt
70-47-file47.txt
72-51-10-file10.txt
73-53-13-file13.txt
74-56-19-file19.txt
75-59-25-file25.txt
76-62-31-file31.txt
77-65-37-file37.txt
78-68-43-file43.txt
79-71-49-file49.txt

真是怪哉。。。

2008-1-8 20:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 6 楼』:  

把扩展名改了试试

2008-1-8 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by everest79 at 2008-1-8 20:57:
把扩展名改了试试

改了似乎也没有用。

2008-1-8 21:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 8 楼』:  

出现重复命令可能是for /r提取的文件是即时性生成的
for /r %i in (*.txt) do ren %i %~dpni.sss

ren *.sss *.txt

2008-1-8 21:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




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

使用临时文件,或者不使用for /r
改为

  Quote:
setlocal enabledelayedexpansion
set ds=d:\test
set a=0
for /f %%i in ('dir /b %ds%') do (set/aa+=1&ren %ds%\%%i !a!-%%i)





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





积分 452
发帖 202
注册 2006-12-21
状态 离线
『第 10 楼』:  

一:
@echo off
setlocal enabledelayedexpansion
c: &mkdir 2 & cd 2
for /l %%a in (1,1,50) do echo.>>file%%a.txt
set a=0
for /r c:\2 %%i in (*) do (
        set/a a+=1
        ren "%%i"  !a!["%%~nxi"
)

事实上的确跟FOR /r  有关 ,  不过并不是每次都会出现意料之外的结果

需要满足2个条件  1: 有特许字符 如  ? *
                              (没命令扩展,只有? * 也会会有外遇)
                        
                         2: 需要命令扩展


@echo off
setlocal enabledelayedexpansion
i: &mkdir 2 & cd 2
for /l %%a in (1,1,50) do echo.>>file%%a.txt
set a=0
for /r i:\2 %%i in (*) do (
        set/a a+=1
        ren "%%i"  !a!?.txt
)



@echo off
setlocal enabledelayedexpansion
i: &mkdir 2 & cd 2
for /l %%a in (1,1,50) do echo.>>file%%a.txt
set a=0
for /r i:\2 %%i in (*) do (
        set/a a+=1
        ren "%%i"  !a!*.txt
)

目前已知就几个, 不过只要有for命令扩展, 出外遇的几率越大。

替换下第一个例子,这不是全部, :P

!a!-"%%~nxi"
!a!}"%%~nxi"         
!a!{"%%~nxi"
!a!]"%%~nxi"
!a!["%%~nxi"
!a!~"%%~nxi"

2008-1-20 13:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
daowuwei
新手上路





积分 10
发帖 4
注册 2007-11-19
状态 离线
『第 11 楼』:  

感谢以上各位,特别是429499381版主。好久没上来了,没想到今天一来就有所收获。

2008-1-25 21:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: