![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 09:23 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 这是for/r的bug吗 |
| 可打印版本 1,212 / 10 |
| 第1楼 daowuwei | 发表于 2008-01-08 12:44 |
| 新手上路 发帖 4 积分 10 | |
|
这是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)以上代码不能如愿。希望大家帮忙看看是什么原因,谢谢! |
|
| 第2楼 lxmxn | 发表于 2008-01-08 13:54 |
| 版主 发帖 4,938 积分 11,386 | |
|
不是bug,你想如何排序呢?
|
|
| 第3楼 daowuwei | 发表于 2008-01-08 18:11 |
| 新手上路 发帖 4 积分 10 | |
|
回复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。 不知说清楚没有....... |
|
| 第4楼 balinger | 发表于 2008-01-08 20:15 |
| 中级用户 发帖 115 积分 356 | |
|
我测试文件数十几个都可以的,怪了,为何楼主不能超过6个。
|
|
| 第5楼 lxmxn | 发表于 2008-01-08 20:46 |
| 版主 发帖 4,938 积分 11,386 | |
|
回复daowuwei 不好意思,先前没有测试。
测试之后发现果然有bug,但我测试的结果视乎和你不一样,原文件名是“file1.txt”到“file50”,修改之后,却成了下面这样的: 1-file1.txt 真是怪哉。。。 |
|
| 第6楼 everest79 | 发表于 2008-01-08 20:57 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
把扩展名改了试试
|
|
| 第7楼 lxmxn | 发表于 2008-01-08 21:29 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by everest79 at 2008-1-8 20:57: 改了似乎也没有用。 |
|
| 第8楼 everest79 | 发表于 2008-01-08 21:46 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
出现重复命令可能是for /r提取的文件是即时性生成的
for /r %i in (*.txt) do ren %i %~dpni.sss ren *.sss *.txt |
|
| 第9楼 chenall | 发表于 2008-01-09 00:10 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
使用临时文件,或者不使用for /r
改为
|
|
| 第10楼 429499381 | 发表于 2008-01-20 13:51 |
| 中级用户 发帖 202 积分 452 | |
|
一:
@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" |
|
| 第11楼 daowuwei | 发表于 2008-01-25 21:09 |
| 新手上路 发帖 4 积分 10 | |
|
感谢以上各位,特别是429499381版主。好久没上来了,没想到今天一来就有所收获。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |