找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31749|回复: 9

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

[复制链接]
发表于 2013-6-24 20:54:08 | 显示全部楼层 |阅读模式
本帖最后由 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的值就可以。
发表于 2013-6-24 23:01:59 | 显示全部楼层
变量名不区分大小写,i和n都被你定义了,n最大只能为24,这时所有的字符都定义了,最终进入死循环。
发表于 2013-6-25 00:16:33 | 显示全部楼层
我习惯这样 效率相对提高点

  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
复制代码
发表于 2016-8-13 19:09:03 | 显示全部楼层
本帖最后由 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
复制代码
但只输出一个变量。另外的字母变……怎么取
发表于 2016-8-13 20:14:59 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2016-8-13 20:29:27 | 显示全部楼层
那请问要是在A到J之间 10个字母 之间的10个随机呢
发表于 2016-8-13 20:32:54 | 显示全部楼层
能纯批处理做吗。不虽第三方软件的办法
发表于 2016-8-13 21:27:09 | 显示全部楼层
  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
复制代码
发表于 2016-8-13 21:33:40 | 显示全部楼层
本帖最后由 dostt2008 于 2016-8-13 21:40 编辑

回复 8# Batcher

要十个变量。不是一起显示10个字母 像5楼的版主一样。显示变量 的值。

我要的就是这10个echo的变量。
发表于 2016-8-15 09:03:44 | 显示全部楼层
我也想知如何输出

ehco ver1=A
ehco ver2=B
ehco ver3=C  ......

这些ver1的变量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:18 , Processed in 0.020745 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表