Board logo

标题: 请教如何随机生成一串字符串 [打印本页]

作者: wqh2008     时间: 2008-4-5 09:59    标题: 请教如何随机生成一串字符串

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

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

[ Last edited by wqh2008 on 2008-4-9 at 02:51 PM ]
作者: 26933062     时间: 2008-4-5 11:23
:
@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

作者: wqh2008     时间: 2008-4-6 09:12
非常感谢,但是还有个问题,特殊字符怎么加进去?
像:~!@#$%^&*()_+|":?><{}.,/\[]-=
     ∠①Ⅳ∫∮≌∞♂
这些字符可以加进去吗,其中的一部分也可以,如果可以怎么加呢?
作者: forkfan     时间: 2008-4-6 14:21
那么生成1--50的随机排列怎么排
  疑问:有1112,如果随机数是11    那么call set m=!m!%%var:~!w!,1%%替代的是1112中的(11)12还是1(11)2呢?
作者: 26933062     时间: 2008-4-6 14:26
替代的是1112中的(11)12
作者: forkfan     时间: 2008-4-6 14:32
不会替换1112中的1(11)2吗????
作者: 26933062     时间: 2008-4-6 15:11
你是说随机排列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

作者: moniuming     时间: 2008-4-6 15:51
请问7楼,是如何实现的呢,谢谢!
作者: forkfan     时间: 2008-4-6 16:29
同问...
作者: wqh2008     时间: 2008-4-9 08:09
还有哪位可以回答下我的疑问吗?谢谢!
作者: moniuming     时间: 2008-4-9 14:44


  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 ]
作者: wqh2008     时间: 2008-4-9 14:50
谢谢26933062、moniuming的解答!
顺便问下各位,怎么排列这些字符才能使它产生的字符串复杂些?
比如:
0#l{F?(7位)
K*&5{(Dt8# (10位)

[ Last edited by wqh2008 on 2008-4-9 at 02:57 PM ]
作者: moniuming     时间: 2008-4-9 15:39
把字母和数字减少,哈哈
作者: moniuming     时间: 2008-4-11 00:07
对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~@#$%*()_+`':?∠①Ⅳ∫∮≌∞♂{}.,/\[]-