标题: [文本处理] 从26个字母中随机取指定数目/数量的不同/不重复的字母的批处理代码错在哪里? [打印本页]
作者: 悬崖之树 时间: 2013-6-24 20:54 标题: 从26个字母中随机取指定数目/数量的不同/不重复的字母的批处理代码错在哪里?
本帖最后由 pcl_test 于 2016-8-13 20:28 编辑
- @echo off
- setlocal enabledelayedexpansion
- set str=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- :loop
- set /a i=%random%%%26
- set letter=!str:~%i%,1!
- if not defined %letter% (
- set %letter%=%letter%
- set select=%select%%letter%
- set /a n+=1
- if !n!==25 goto out
- )
- goto loop
- :out
- echo %select%
- pause
复制代码
运行后就不会停下来了,但是如果把上面的“25”改成“24”或小于24的值就可以。
作者: powerbat 时间: 2013-6-24 23:01
变量名不区分大小写,i和n都被你定义了,n最大只能为24,这时所有的字符都定义了,最终进入死循环。
作者: terse 时间: 2013-6-25 00:16
我习惯这样 效率相对提高点- @echo off
- set "str=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- setlocal enabledelayedexpansion
- set str=%str%
- for /l %%i in (26 -1 2) do (
- set /a i=!random!%%%%i
- for %%j in (!i!) do (
- for %%k in (!str:~%%j^,1!) do (
- set letter=!letter!%%k
- set str=!str:%%k=!
- )
- )
- )
- endlocal&set select=%letter%
- echo %select%
- pause
复制代码
作者: dostt2008 时间: 2016-8-13 19:09
本帖最后由 dostt2008 于 2016-8-13 19:11 编辑
请问怎样echo 输出25个字母的变量呢
怎么取 每个字母的变量呢
我在网上看到- @echo off&setlocal enabledelayedexpansion
- set "str=abcdefghijklmnopqrstuvwxyz"
- set/a r=%random%%%26
- echo !str:~%r%,1!
- pause
复制代码
但只输出一个变量。另外的字母变……怎么取
作者: pcl_test 时间: 2016-8-13 20:14
本帖最后由 pcl_test 于 2016-8-13 22:02 编辑
路过 第三方http://www.bathome.net/s/tool/index.html?key=gawk
从26个字母随机取10个不同的字母并赋值给变量- @echo off&setlocal enabledelayedexpansion
- for /f %%a in ('gawk "BEGIN{srand();split(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",a,\"\");while(i<10){while(1){n=int(rand()*26)+1;if(b[a[n]]==0){b[a[n]]++;break}}i++;print a[n]}}"') do set/an+=1&set #!n!=%%a
- set #
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- for /f %%a in ('mshta "javascript:(new ActiveXObject('Scripting.Filesystemobject')).GetStandardStream(1).Write('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').sort(function(){return Math.random()-.5}).slice(-10).join('\r\n'));close()"') do set/an+=1&set #!n!=%%a
- set #
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- for /f %%a in ('powershell -c "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.ToCharArray()|Get-Random -count 10"') do set/an+=1&set #!n!=%%a
- set #
- pause
复制代码
作者: dostt2008 时间: 2016-8-13 20:29
那请问要是在A到J之间 10个字母 之间的10个随机呢
作者: dostt2008 时间: 2016-8-13 20:32
能纯批处理做吗。不虽第三方软件的办法
作者: Batcher 时间: 2016-8-13 21:27
- @echo off
- setlocal enabledelayedexpansion
- set "str=abcdefghijklmnopqrstuvwxyz"
- set /a r=%random%%%26
- set char=!str:~%r%,1!
- set result=!str:%char%=!
- echo %result%
- pause
复制代码
作者: dostt2008 时间: 2016-8-13 21:33
本帖最后由 dostt2008 于 2016-8-13 21:40 编辑
回复 8# Batcher
要十个变量。不是一起显示10个字母 像5楼的版主一样。显示变量 的值。
我要的就是这10个echo的变量。
作者: yajiu 时间: 2016-8-15 09:03
我也想知如何输出
ehco ver1=A
ehco ver2=B
ehco ver3=C ......
这些ver1的变量
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |