中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 17:32
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]从字符串中随机取字符 查看 859 回复 7
楼 主 [求助]从字符串中随机取字符 发表于 2010-05-07 12:26 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 93
发帖 57
注册 2007-03-12 12:04
19年会员
UID 81503
性别 男
状态 离线
我想从字符串 WORDS 中随机取50个字符。本人写的代码如下,但得不到想要的结果。请高手们帮忙改正,本人先谢谢啦!

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET WORDS=abcdefghijklmnopqrstuvwxyz1234567890

SET STR=
FOR /L %%T IN (1,1,50) DO (
SET /A L=!RANDOM!%%36

SET WORD=%%WORDS:~!L!,1%%
SET STR=!STR!!WORD!
)

ECHO STR===!STR!

PAUSE

GOTO :EOF

变量 WORD 的赋值不正确!

[ Last edited by ruisoft on 2010-5-7 at 12:32 ]
2 发表于 2010-05-07 12:41 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
SET WORDS=abcdefghijklmnopqrstuvwxyz1234567890
FOR /L %%T IN (1,1,50) DO (
SET/A L=!RANDOM!%%36
CALL SET STR=!STR!%%WORDS:~!L!,1%%
)
ECHO STR===%STR%
PAUSE
3 发表于 2010-05-07 12:44 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
或者写成
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
SET WORDS=abcdefghijklmnopqrstuvwxyz1234567890
FOR /L %%T IN (1,1,50) DO (
SET/A L=!RANDOM!%%36
FOR %%J IN (!L!) DO SET STR=!STR!!WORDS:~%%J,1!
)
ECHO STR===%STR%
PAUSE

或是:
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
SET WORDS=abcdefghijklmnopqrstuvwxyz1234567890
FOR /L %%T IN (1,1,50) DO FOR /F %%J IN ('SET/A !RANDOM!%%36') DO SET STR=!STR!!WORDS:~%%J,1!
ECHO STR===%STR%
PAUSE


[ Last edited by Hanyeguxing on 2010-5-7 at 12:50 ]
4 发表于 2010-05-07 12:46 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 93
发帖 57
注册 2007-03-12 12:04
19年会员
UID 81503
性别 男
状态 离线
CALL SET STR=!STR!%%WORDS:~!L!,1%%

此段代码如何理解?能否给个详细的说明呢?
5 发表于 2010-05-07 12:47 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 93
发帖 57
注册 2007-03-12 12:04
19年会员
UID 81503
性别 男
状态 离线
CALL 不是子程序调用吗?
6 发表于 2010-05-07 12:51 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
在这里,call进行嵌套的变量扩展
7 发表于 2010-05-07 12:56 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 93
发帖 57
注册 2007-03-12 12:04
19年会员
UID 81503
性别 男
状态 离线
谢谢你!
8 发表于 2010-05-07 13:00 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
上面三个示例:
第一个写起来最简单,但耗时比第二要长
第二个运行最快,但比第一个写起来麻烦
第三个,只是个思路而已,集中了前两个的缺点。。。
论坛跳转: