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