中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-01 16:26
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 关于随机变量%random% 求助 查看 998 回复 10
楼 主 关于随机变量%random% 求助 发表于 2007-09-07 14:03 ·  中国 河南 洛阳 西工区 联通
初级用户
积分 55
发帖 22
注册 2007-09-04 11:55
18年会员
UID 96529
性别 男
状态 离线
我想实现把本文件夹内所有的文本文件改名,名字为随机数,用了%random%变量,程序如下:

@echo off
for %%a in (*.txt) do (ren %%a %random%.txt)

为何达不到预期效果,文本长名字的情况可用%~fsa解决,暂不考虑
在此for循环中,%random%不可更新,运行结果提示“与现有文件重名”
请问如何解决,实现对所有文件的随机更名操作

关键问题在与如何能在运行一次批处理的情况下生成若干个不同的随机数

[ Last edited by araise on 2007-9-7 at 02:41 PM ]
2 发表于 2007-09-07 15:49 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
试试这样:


@echo off
for %%a in (*.txt) do call :_rename "%%a"
goto :eof

:_rename
echo ren %1 %random%.txt
goto :eof


我自己没有测试,不知道好用不。

[ Last edited by Climbing on 2007-9-7 at 03:52 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
zhclsy +1 2007-10-25 10:11
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2007-09-07 15:53 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
试过了,基本上满足要求。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
4 发表于 2007-09-07 15:55 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
或者这样也可以:

@echo off & setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.*) do echo ren "%%a" !random!.txt
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
5 发表于 2007-09-07 17:19 ·  中国 山西 太原 联通
中级用户
★★
积分 216
发帖 81
注册 2007-08-06 12:23
18年会员
UID 94721
性别 男
状态 离线
不对根本换不了只是写出来了不换
Crossings must be my teacher
Modest progress can be
6 发表于 2007-09-07 20:04 ·  中国 河南 洛阳 西工区 联通
初级用户
积分 55
发帖 22
注册 2007-09-04 11:55
18年会员
UID 96529
性别 男
状态 离线
Climbing你好,
你的第二段代码的思路我明白了,正是我所需要的,谢谢
只是第一段代码中有不解之处:
为何要在主程序段和标签中用到goto :eof
这个goto :eof我不很明白,之前也查过相关资料但仍不甚解
希望对此加以解释,谢谢
7 发表于 2007-09-10 09:19 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
:eof是一个默认标签,表示文件结尾(end of file),意思就是跳出程序。

其它的就好理解了吧?
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
8 发表于 2007-09-10 18:50 ·  中国 河南 洛阳 联通
初级用户
积分 55
发帖 22
注册 2007-09-04 11:55
18年会员
UID 96529
性别 男
状态 离线
谢谢拉~~~
9 发表于 2007-09-15 16:02 ·  中国 北京 大兴区 联通
初级用户
积分 48
发帖 21
注册 2007-09-13 13:05
18年会员
UID 97264
性别 男
状态 离线
Originally posted by Climbing at 2007-9-7 03:55 PM:
或者这样也可以:

@echo off & setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.*) do echo ren "%%a" !random!.txt


请讲解一下
@echo off & setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.*) do echo ren "%%a" !random!.txt

中的setlocal这句和后面的ren "%%a" !random!.txt
是怎么来的.谢谢.看不懂~
10 发表于 2007-10-21 13:34 ·  中国 四川 成都 电信
初级用户
积分 80
发帖 41
注册 2007-10-05 14:44
18年会员
UID 98965
性别 男
状态 离线
学习,谢谢
http://user.qzone.qq.com/182365808
11 发表于 2007-10-22 17:47 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
Originally posted by kmtis003 at 2007-9-15 16:02:


请讲解一下
@echo off & setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.*) do echo ren "%%a" !random!.txt

中的setlocal这句和后面的ren "%%a" !random!.txt
...

用FOR/?看下帮助
论坛跳转: