Board logo

标题: 这是for/r的bug吗 [打印本页]

作者: daowuwei     时间: 2008-1-8 12:44    标题: 这是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)以上代码不能如愿。希望大家帮忙看看是什么原因,谢谢!

作者: lxmxn     时间: 2008-1-8 13:54
不是bug,你想如何排序呢?

作者: daowuwei     时间: 2008-1-8 18:11    标题: 回复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。 不知说清楚没有.......

作者: balinger     时间: 2008-1-8 20:15
我测试文件数十几个都可以的,怪了,为何楼主不能超过6个。

作者: lxmxn     时间: 2008-1-8 20:46    标题: 回复daowuwei
不好意思,先前没有测试。 测试之后发现果然有bug,但我测试的结果视乎和你不一样,原文件名是“file1.txt”到“file50”,修改之后,却成了下面这样的:
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
真是怪哉。。。

作者: everest79     时间: 2008-1-8 20:57
把扩展名改了试试

作者: lxmxn     时间: 2008-1-8 21:29
Originally posted by everest79 at 2008-1-8 20:57: 把扩展名改了试试
改了似乎也没有用。

作者: everest79     时间: 2008-1-8 21:46
出现重复命令可能是for /r提取的文件是即时性生成的 for /r %i in (*.txt) do ren %i %~dpni.sss ren *.sss *.txt

作者: chenall     时间: 2008-1-9 00:10
使用临时文件,或者不使用for /r 改为
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)

作者: 429499381     时间: 2008-1-20 13:51
一: @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"

作者: daowuwei     时间: 2008-1-25 21:09
感谢以上各位,特别是429499381版主。好久没上来了,没想到今天一来就有所收获。