Board logo

标题: [文本处理] [已解决]如何生成指定个数的随机字符 [打印本页]

作者: xieqingx    时间: 2010-4-5 20:08     标题: [已解决]如何生成指定个数的随机字符

以下代码是生成30个随机字符的代码
  1. @echo off
  2. set code==^^^&%%%^:!$#^>^<:=~*()@"'`;\| abcdefghijklmnopqrstuvwxyz0123456789-_+?,.
  3. setlocal enabledelayedexpansion
  4. :begin
  5. set /a a=%random%%%64
  6. set var=!code:~%a%,1!&set str=!str!!var!
  7. set /a n+=1
  8. if !n! lss 30 goto begin
  9. echo !str!
  10. set /a m+=1
  11. if !m! lss 20 set str=&set n=0&goto begin
  12. pause>nul
复制代码
现在我想只保留 @abcdefghijklmnopqrstuvwxyz0123456789 这些字符,也生成30个随机字符,但是如下修改后,输出时位数都不一样了,要怎么改呢??请教一下?
  1. @echo off
  2. set code==@abcdefghijklmnopqrstuvwxyz0123456789
  3. setlocal enabledelayedexpansion
  4. :begin
  5. set /a a=%random%%%64
  6. set var=!code:~%a%,1!&set str=!str!!var!
  7. set /a n+=1
  8. if !n! lss 30 goto begin
  9. echo !str!
  10. set /a m+=1
  11. if !m! lss 20 set str=&set n=0&goto begin
  12. pause>nul
复制代码
我是想做一个重命名随机文件夹名的P处理,由于原代码包含了非法字符,所以我才改的][

[ 本帖最后由 xieqingx 于 2010-4-5 21:02 编辑 ]
作者: namejm    时间: 2010-4-5 20:13

把  set /a a=%random%%%64  改成  set /a a=%random%%%30

=====================================================

以上说法有误,应当改成 set /a a=%random%%%38,也就是说,数字应当与要处理的字符串的长度保持一致即可。
作者: xieqingx    时间: 2010-4-5 20:26

谢谢你的回答,厉害啊。
我想弄明白是如何算出来的

比较我要随意指定位数呢  如45位 15位  25位等等
那又如何改啊,教我一下好吗?
作者: namejm    时间: 2010-4-5 20:41

set /a a=%random%%%64  的结果在0~63这个范围内
set /a a=%random%%%32 的结果在0~31这个范围内
当用set来截取字符时,偏移量是从0开始计算的
如果某字符串长度有64字符,那么,最后一个字符的表示方法为 set str=%str:~63,1%
如果某字符串长度有32字符,那么,最后一个字符的表示方法为 set str=%str:~31,1%
结合起来看看就明白是怎么回事了
作者: GNU    时间: 2010-4-5 20:41     标题: 回复 3楼 的帖子

那段代码你哪里看不懂?
作者: xieqingx    时间: 2010-4-5 21:01

主要是弄不明白set /a a=%random%%%64  时,这个a值会在什么范围内

经过老大的讲解,OK了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2