[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 从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的值就可以。
时光荏苒||新陈代谢&&涛声依旧||本性难移

我也想知如何输出

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

这些ver1的变量

TOP

本帖最后由 dostt2008 于 2016-8-13 21:40 编辑

回复 8# Batcher

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

我要的就是这10个echo的变量。

TOP

  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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

能纯批处理做吗。不虽第三方软件的办法

TOP

那请问要是在A到J之间 10个字母 之间的10个随机呢

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码
但只输出一个变量。另外的字母变……怎么取

TOP

我习惯这样 效率相对提高点
  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
复制代码

TOP

变量名不区分大小写,i和n都被你定义了,n最大只能为24,这时所有的字符都定义了,最终进入死循环。

TOP

返回列表