??? echo %pass1% %pass2% %pass3% ??? pause ??? exit ???
??? :randomPassword ??? ::---------生成随机密码
??? ::---------%1为密码长度,%2及以后为返回变量名称 ??? ::---------goto循环、变量嵌套、命令嵌套 ??? @echo off
??? if \??? if %1 lss 1 goto :eof ??? set password_len=%1 ??? set return=
??? set wordset=abcdefghijklmnopqrstuvwxyz023456789_ ??? ::---------------------------循环 ??? :randomPassword1
??? set /a numof=%random%%6
??? call set return=%return%%%wordset:~%numof%,1%% ??? set /a password_len-=1
??? if %password_len% gtr 0 goto randomPassword1 ??? ::---------------------------循环 ??? if not \
??? shift /2
??? if not \??? goto :eof
复制代码 说明:本例涉及到变量嵌套和命令嵌套的应用,见后。
十三、变量嵌套 与 命令嵌套
和其它编程语言相比,dos功能显得相对简单,要实现比较复杂的功能,需要充分运用各种技巧,变量嵌套与命令嵌套就是此类技巧之一。
先复习一下前面的“字符串截取”的关键内容:
********************************************** 截取功能统一语法格式为:%a:~[m[,n]]%
**********************************************
方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)。
百分号如果需要当成单一字符,必须写成%%
以上是dos变量处理的通用格式,如果其中的m、n为变量,那么这种情况就是变量嵌套了。
比如设变量word为“abcdefghij”,变量num为“123456789”
%word:~4,1%为e,其中4可以从变量num中取值,即%num:~3,1%,写成组合形式如下: %word:~%num:~3,1%,1% 经测试这种写法不能正确执行,写成%word:~(%num:~3,1%),1%同样不行,那么,怎么实现这种变量嵌套呢?这就必须结合命令嵌套。
什么是命令嵌套呢?简单的说,首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。
例:用call语句实现命令嵌套
??? @echo off
??? set str1=aaa echo ok bbb ??? echo 初始字符串:%str1%
??? echo 生成命令字符串如下: ??? echo %str1:~4,7%
??? echo 运行命令字符串生成最终结果为: ??? call %str1:~4,7% ??? pause
复制代码 运行显示:
初始字符串:aaa echo ok bbb 生成命令字符串如下: echo ok
运行命令字符串生成最终结果为: ok
请按任意键继续. . .