标题:
精通批处理的进来看看
[打印本页]
作者:
jaceyxp
时间:
2007-4-16 04:11
标题:
精通批处理的进来看看
设定a1=123,
b1=456,
c1=789,
d1=009
我想得到的结果是:
随机取2个值(比如a1c1,a1d1,b1c1,b1d1等等)要求输入它们的值,输入对了就ok,不对就退出。
第一次运行时屏幕提示:
请输入组合密码a1b1:
(如果输入123456)就通过,否则退出。
第二次运行时屏幕提示:
请输入组合密码d1b1:
(如果输入009456)就通过,否则退出。
……
以此类推。相当于随机取数组。这个该怎么实现?
换句话说我要实现像工商银行一样的口令卡功能。
作者:
bjsh
时间:
2007-4-16 05:08
试试这个呢
Quote:
@
echo
off
&
setlocal
enabledelayedexpansion
set
"
a1=123
"
set
"
b1=456
"
set
"
c1=789
"
set
"
d1=009
"
set
/a
m=
%random%
%%4
+1
:loop
set
/a
n=
%random%
%%4
+1
if
"
%n%
"
==
"
%m%
"
goto
loop
set
count=0
for
%%a
in
(
a1 b1 c1 d1
)
do
set
/a
count+=1 &&
if
"
!count!
"
==
"
%m%
"
(
set
"
p=
%%a
"
)
else
(
if
"
!count!
"
==
"
%n%
"
set
"
q=
%%a
"
)
set
/p
in
=请输入组合密码
%p%
%q%
:
if
not
defined
in
echo
fail &
pause
&
goto
exit
for
/f
%%b
in
(
'
call
echo
%%%p%
%%
'
)
do
set
"
answer=
%%b
"
for
/f
%%c
in
(
'
call
echo
%%%q%
%%
'
)
do
set
"
answer=
%answer%
%%c
"
if
"
%in%
"
==
"
%answer%
"
echo
pass &
pause
&&
goto
exit
echo
fail &
pause
:exit
BJSH发表于: 2007-04-15 15:57
作者:
vkill
时间:
2007-4-16 05:16
Quote:
Originally posted by
bjsh
at 2007-4-16 05:08:
试试这个呢
bjsh 兄
多写了 setlocal enabledelayedexpansion 哦,呵呵,因为你没有用
作者:
bjsh
时间:
2007-4-16 05:24
第11句用了呀;呵呵
作者:
vkill
时间:
2007-4-16 05:25
Quote:
Originally posted by
bjsh
at 2007-4-16 05:24:
第11句用了呀;呵呵
哦,怪我没有仔细看,不过怎么下面没有用,像这个%%%p%%%
作者:
bjsh
时间:
2007-4-16 05:25
我记得set 有个可以连续赋值的;
也就是2 3 4 5行本来可以合成一行的;一下想不起如何连续赋值了;
哪位给提醒下啊!
作者:
bjsh
时间:
2007-4-16 05:29
Quote:
Originally posted by
vkill
at 2007-4-15 04:25 PM:
哦,怪我没有仔细看,不过怎么下面没有用,像这个%%%p%%%
真是的;用call用顺手了;直接就几个百分号上去了;
作者:
vkill
时间:
2007-4-16 05:53
Quote:
Originally posted by
bjsh
at 2007-4-16 05:25:
我记得set 有个可以连续赋值的;
也就是2 3 4 5行本来可以合成一行的;一下想不起如何连续赋值了;
哪位给提醒下啊!
大概这个样子
set "v=!v!%%?"
作者:
jaceyxp
时间:
2007-4-16 06:04
bjsh不愧是高手,如果我要增加如:a2,b2,c2,d2.....我要改什么?setlocal enabledelayedexpansion是什么意思?
作者:
bjsh
时间:
2007-4-16 06:21
Quote:
如果我要增加如:a2,b2,c2,d2.....我要改什么?
在第5行后面继续set a2=.....
修改第六行和第八行的随机数;比如你增加到了八个 把4改成8;
set /a m=%random%%%4+1改为set /a m=%random%%%8+1
同时第11行的for 中的in()集合要把所有的a1.....a2...什么的加进去以空格分开;
作者:
windeshadow
时间:
2007-4-16 12:02
哈哈 没看懂 有没人翻译下?
set /a m=%random%%%4+1 里面面%%4是什么意思
for /f %%b in ('call echo %%%p%%%') do set "answer=%%b"
%%%p%%% 这个为什么这么多%号?
哈哈要是有人翻译下 第11句就更好了
作者:
dikex
时间:
2007-4-16 12:19
setlocal enabledelayedexpansion
搜索变量延迟
set /a m=%random%%%4+1,在批处理里面%是转移字符,%%这个在命令行下面为%,就是set /a m=%random%%4+1,而set /a下面%意思为整除,所以这个就是把m的值设为一个随机数正常4后再加上1;
那么多%的原因参照上面的:%为转移字符
作者:
flyinspace
时间:
2007-4-16 12:37
bjsh,,关于连续赋值是 :
set /a a=1,b=2,c=3,d=4
这样就把几个值给确定了。。。。
作者:
bjsh
时间:
2007-4-16 21:16
谢flyinspace兄
作者:
lililulula
时间:
2007-4-17 04:31
没看明白~~~~残念~~~~~~~
作者:
flyinspace
时间:
2007-4-17 09:40
提示可以改一下,
改成:请输入第 1 组+第 3 组 的密码。
欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/)
Powered by Discuz! 2.5