Board logo

标题: [求助]从字符串中随机取字符 [打印本页]

作者: ruisoft     时间: 2010-5-7 12:26    标题: [求助]从字符串中随机取字符

我想从字符串 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 ]
作者: Hanyeguxing     时间: 2010-5-7 12:41

@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

作者: Hanyeguxing     时间: 2010-5-7 12:44
或者写成
@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 ]
作者: ruisoft     时间: 2010-5-7 12:46
CALL SET STR=!STR!%%WORDS:~!L!,1%%

此段代码如何理解?能否给个详细的说明呢?
作者: ruisoft     时间: 2010-5-7 12:47
CALL 不是子程序调用吗?
作者: Hanyeguxing     时间: 2010-5-7 12:51
在这里,call进行嵌套的变量扩展
作者: ruisoft     时间: 2010-5-7 12:56
谢谢你!
作者: Hanyeguxing     时间: 2010-5-7 13:00
上面三个示例:
第一个写起来最简单,但耗时比第二要长
第二个运行最快,但比第一个写起来麻烦
第三个,只是个思路而已,集中了前两个的缺点。。。