中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 01:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何随机生成一串字符串 查看 1,124 回复 13
楼 主 请教如何随机生成一串字符串 发表于 2008-04-05 09:59 ·  中国 湖南 永州 电信
新手上路
积分 10
发帖 4
注册 2008-04-04 22:22
18年会员
UID 114975
性别 男
状态 离线
请教论坛各位一个问题:
能不能用批处理生成一个指定长度的字符串,自己指定,1~20位,此字符串由数字、大小写字母、特殊字符混合组成!并输出保存.
例如,运行它产生一个8位的(自己指定,可以更改产生长度):保存到D:\vsj.txt
F%2"j8@?

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

[ Last edited by wqh2008 on 2008-4-9 at 02:51 PM ]
2 发表于 2008-04-05 11:23 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
:

@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-04-09 14:49
致精致简!
3 发表于 2008-04-06 09:12 ·  中国 湖南 永州 电信
新手上路
积分 10
发帖 4
注册 2008-04-04 22:22
18年会员
UID 114975
性别 男
状态 离线
非常感谢,但是还有个问题,特殊字符怎么加进去?
像:~!@#$%^&*()_+|":?><{}.,/\[]-=
∠①Ⅳ∫∮≌∞♂
这些字符可以加进去吗,其中的一部分也可以,如果可以怎么加呢?
4 发表于 2008-04-06 14:21 ·  中国 广东 肇庆 电信
初级用户
积分 27
发帖 12
注册 2008-03-29 22:24
18年会员
UID 114395
性别 男
状态 离线
那么生成1--50的随机排列怎么排
疑问:有1112,如果随机数是11 那么call set m=!m!%%var:~!w!,1%%替代的是1112中的(11)12还是1(11)2呢?
5 发表于 2008-04-06 14:26 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
替代的是1112中的(11)12
致精致简!
6 发表于 2008-04-06 14:32 ·  中国 广东 肇庆 电信
初级用户
积分 27
发帖 12
注册 2008-03-29 22:24
18年会员
UID 114395
性别 男
状态 离线
不会替换1112中的1(11)2吗????
7 发表于 2008-04-06 15:11 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
你是说随机排列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
致精致简!
8 发表于 2008-04-06 15:51 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
请问7楼,是如何实现的呢,谢谢!
9 发表于 2008-04-06 16:29 ·  中国 广东 肇庆 电信
初级用户
积分 27
发帖 12
注册 2008-03-29 22:24
18年会员
UID 114395
性别 男
状态 离线
同问...
10 发表于 2008-04-09 08:09 ·  中国 湖南 永州 电信
新手上路
积分 10
发帖 4
注册 2008-04-04 22:22
18年会员
UID 114975
性别 男
状态 离线
还有哪位可以回答下我的疑问吗?谢谢!
11 发表于 2008-04-09 14:44 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
非常感谢,但是还有个问题,特殊字符怎么加进去?
像:~!@#$%^&*()_+|":?><{}.,/\-=
∠①Ⅳ∫∮≌∞♂
这些字符可以加进去吗,其中的一部分也可以,如果可以怎么加呢?

请保存为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-04-09 14:49
12 发表于 2008-04-09 14:50 ·  中国 湖南 永州 电信
新手上路
积分 10
发帖 4
注册 2008-04-04 22:22
18年会员
UID 114975
性别 男
状态 离线
谢谢26933062、moniuming的解答!
顺便问下各位,怎么排列这些字符才能使它产生的字符串复杂些?
比如:
0#l{F?(7位)
K*&5{(Dt8# (10位)

[ Last edited by wqh2008 on 2008-4-9 at 02:57 PM ]
13 发表于 2008-04-09 15:39 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
把字母和数字减少,哈哈
14 发表于 2008-04-11 00:07 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
对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~@#$%*()_+`':?∠①Ⅳ∫∮≌∞♂{}.,/\-
论坛跳转: