标题: 精通批处理的进来看看
[打印本页]
作者: 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 组 的密码。