|
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
状态 离线
|
|
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
状态 离线
|
|
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 |
|
|
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 |
|