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

[文本处理] [已解决]如何生成指定个数的随机字符

以下代码是生成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 编辑 ]
1

评分人数

    • namejm: 感谢主动给标题标注[已解决]字样PB + 2

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

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

以上说法有误,应当改成 set /a a=%random%%%38,也就是说,数字应当与要处理的字符串的长度保持一致即可。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

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

比较我要随意指定位数呢  如45位 15位  25位等等
那又如何改啊,教我一下好吗?

TOP

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%
结合起来看看就明白是怎么回事了
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 3楼 的帖子

那段代码你哪里看不懂?

TOP

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

经过老大的讲解,OK了

TOP

返回列表