Board logo

标题: [文本处理] 从26个字母中随机取指定数目/数量的不同/不重复的字母的批处理代码错在哪里? [打印本页]

作者: 悬崖之树    时间: 2013-6-24 20:54     标题: 从26个字母中随机取指定数目/数量的不同/不重复的字母的批处理代码错在哪里?

本帖最后由 pcl_test 于 2016-8-13 20:28 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  4. :loop
  5. set /a i=%random%%%26
  6. set letter=!str:~%i%,1!
  7. if not defined %letter% (
  8.    set %letter%=%letter%
  9.    set select=%select%%letter%
  10.    set /a n+=1
  11.    if !n!==25 goto out
  12. )
  13. goto loop
  14. :out
  15. echo %select%
  16. pause
复制代码
运行后就不会停下来了,但是如果把上面的“25”改成“24”或小于24的值就可以。
作者: powerbat    时间: 2013-6-24 23:01

变量名不区分大小写,i和n都被你定义了,n最大只能为24,这时所有的字符都定义了,最终进入死循环。
作者: terse    时间: 2013-6-25 00:16

我习惯这样 效率相对提高点
  1. @echo off
  2. set "str=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. setlocal enabledelayedexpansion
  4. set str=%str%
  5. for /l %%i in (26 -1 2) do (
  6.     set /a i=!random!%%%%i
  7.     for %%j in (!i!) do (
  8.         for %%k in (!str:~%%j^,1!) do (
  9.             set letter=!letter!%%k
  10.             set str=!str:%%k=!
  11.         )
  12.     )
  13. )
  14. endlocal&set select=%letter%
  15. echo %select%
  16. pause
复制代码

作者: dostt2008    时间: 2016-8-13 19:09

本帖最后由 dostt2008 于 2016-8-13 19:11 编辑

请问怎样echo 输出25个字母的变量呢

怎么取 每个字母的变量呢

我在网上看到
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=abcdefghijklmnopqrstuvwxyz"
  3. set/a r=%random%%%26
  4. echo !str:~%r%,1!
  5. 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个不同的字母并赋值给变量
  1. @echo off&setlocal enabledelayedexpansion
  2. 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
  3. set #
  4. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. 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
  3. set #
  4. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in ('powershell -c "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.ToCharArray()|Get-Random -count 10"') do set/an+=1&set #!n!=%%a
  3. set #
  4. pause
复制代码

作者: dostt2008    时间: 2016-8-13 20:29

那请问要是在A到J之间 10个字母 之间的10个随机呢
作者: dostt2008    时间: 2016-8-13 20:32

能纯批处理做吗。不虽第三方软件的办法
作者: Batcher    时间: 2016-8-13 21:27

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=abcdefghijklmnopqrstuvwxyz"
  4. set /a r=%random%%%26
  5. set char=!str:~%r%,1!
  6. set result=!str:%char%=!
  7. echo %result%
  8. 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