中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何随机生成一串字符串
作者:
标题: 请教如何随机生成一串字符串 上一主题 | 下一主题
wqh2008
新手上路





积分 10
发帖 4
注册 2008-4-4
状态 离线
『楼 主』:  请教如何随机生成一串字符串

请教论坛各位一个问题:
      能不能用批处理生成一个指定长度的字符串,自己指定,1~20位,此字符串由数字、大小写字母、特殊字符混合组成!并输出保存.
例如,运行它产生一个8位的(自己指定,可以更改产生长度):保存到D:\vsj.txt
F%2"j8@?

如果可以,请回贴告知,谢谢!

[ Last edited by wqh2008 on 2008-4-9 at 02:51 PM ]

2008-4-5 09:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  

:
@echo off&setlocal enabledelayedexpansion
set var=abcdefghijklmnopqrstuvwxyz0123456789
set var=%var%ABCDEFGHIJKLMNOPQRSTUVWXYZ
set /p n=输入指定字符串长度
for /l %%a in (1 1 %n%) do (
  set /a w=!random!%%61
  call set m=!m!%%var:~!w!,1%%
)
>>as.txt echo %m%
start as.txt


   此帖被 +1 点积分    点击查看详情   
评分人:【 wqh2008 分数: +1  时间:2008-4-9 14:49




致精致简!
2008-4-5 11:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wqh2008
新手上路





积分 10
发帖 4
注册 2008-4-4
状态 离线
『第 3 楼』:  

非常感谢,但是还有个问题,特殊字符怎么加进去?
像:~!@#$%^&*()_+|":?><{}.,/\[]-=
     ∠①Ⅳ∫∮≌∞♂
这些字符可以加进去吗,其中的一部分也可以,如果可以怎么加呢?

2008-4-6 09:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
forkfan
初级用户





积分 27
发帖 12
注册 2008-3-29
状态 离线
『第 4 楼』:  

那么生成1--50的随机排列怎么排
  疑问:有1112,如果随机数是11    那么call set m=!m!%%var:~!w!,1%%替代的是1112中的(11)12还是1(11)2呢?

2008-4-6 14:21
查看资料  发送邮件  发短消息 网志  OICQ (272793717)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

替代的是1112中的(11)12



致精致简!
2008-4-6 14:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
forkfan
初级用户





积分 27
发帖 12
注册 2008-3-29
状态 离线
『第 6 楼』:  

不会替换1112中的1(11)2吗????

2008-4-6 14:32
查看资料  发送邮件  发短消息 网志  OICQ (272793717)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

你是说随机排列1-50这50个数字吗?
可以换个思路来完成。
@echo off
for /l %%a in (1 1 50) do call set __%%random%%=%%a
for /f "tokens=2 delims==" %%i in ('set __^|sort /r') do echo %%i
pause




致精致简!
2008-4-6 15:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 8 楼』:  

请问7楼,是如何实现的呢,谢谢!

2008-4-6 15:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
forkfan
初级用户





积分 27
发帖 12
注册 2008-3-29
状态 离线
『第 9 楼』:  

同问...

2008-4-6 16:29
查看资料  发送邮件  发短消息 网志  OICQ (272793717)  编辑帖子  回复  引用回复
wqh2008
新手上路





积分 10
发帖 4
注册 2008-4-4
状态 离线
『第 10 楼』:  

还有哪位可以回答下我的疑问吗?谢谢!

2008-4-9 08:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 11 楼』:  



  Quote:
非常感谢,但是还有个问题,特殊字符怎么加进去?
像:~!@#$%^&*()_+|":?><{}.,/\[]-=
     ∠①Ⅳ∫∮≌∞♂
这些字符可以加进去吗,其中的一部分也可以,如果可以怎么加呢?

请保存为1.bat,不能处理特殊字符(请自行删减),如果有空格会显示ECHO 处于关闭状态(例如"∫"就会视为有空格)
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type 1.bat') do set aa=%%a
:begin
echo.
set /p ab=请输入指定字符串长度:
for /l %%i in (1 1 %ab%) do (
call :aaa
call set ad=%%aa:~!ac!,1%%
set/p=!ad!<nul
>>"d:\vsj.txt" echo !ad!
)
goto begin
:aaa
::95这个数由最后一行的字符来确定,我只是大概数了下
set /a ac=%random%%%95
goto :eof
abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%&*()_+":?∠①Ⅳ∫∮≌∞♂{}.,/\[]-=
[ Last edited by moniuming on 2008-4-9 at 01:46 PM ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 wqh2008 分数: +1  时间:2008-4-9 14:49


2008-4-9 14:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wqh2008
新手上路





积分 10
发帖 4
注册 2008-4-4
状态 离线
『第 12 楼』:  

谢谢26933062、moniuming的解答!
顺便问下各位,怎么排列这些字符才能使它产生的字符串复杂些?
比如:
0#l{F?(7位)
K*&5{(Dt8# (10位)

[ Last edited by wqh2008 on 2008-4-9 at 02:57 PM ]

2008-4-9 14:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 13 楼』:  

把字母和数字减少,哈哈

2008-4-9 15:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 14 楼』:  

对11楼进行了完善,不用去数最后一行的个数了
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type %0') do set aa=%%a&set zz=%%a
set n=0
:again
if "%aa%"=="" goto :begin
set aa=%aa:~1%
set /a n+=1
goto :again
:begin
echo.
set /p ab=请输入指定字符串长度:
for /l %%i in (1 1 %ab%) do (
call :aaa
call set ad=%%zz:~!ac!,1%%
set/p=!ad!<nul
)
echo\&echo.&pause&cls&goto :begin
:aaa
set /a ac=%random%%%%n%
goto :eof
0123456789abcdefghijklmNOPQRSTUVWXYZ~@#$%*()_+`':?∠①Ⅳ∫∮≌∞♂{}.,/\[]-


2008-4-11 00:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: