中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-04 06:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 精通批处理的进来看看 查看 1,797 回复 15
楼 主 精通批处理的进来看看 发表于 2007-04-16 04:11 ·  中国 上海 浦东新区 电信
初级用户
积分 21
发帖 10
注册 2007-03-30 02:03
19年会员
UID 83335
性别 男
状态 离线
设定a1=123,
b1=456,
c1=789,
d1=009
我想得到的结果是:
随机取2个值(比如a1c1,a1d1,b1c1,b1d1等等)要求输入它们的值,输入对了就ok,不对就退出。

第一次运行时屏幕提示:

请输入组合密码a1b1:
(如果输入123456)就通过,否则退出。

第二次运行时屏幕提示:

请输入组合密码d1b1:
(如果输入009456)就通过,否则退出。

……
以此类推。相当于随机取数组。这个该怎么实现?
换句话说我要实现像工商银行一样的口令卡功能。
2 发表于 2007-04-16 05:08 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
试试这个呢


  1. @echo off & setlocal enabledelayedexpansion
  2. set "a1=123"
  3. set "b1=456"
  4. set "c1=789"
  5. set "d1=009"
  6. set /a m=%random%%%4+1
  7. :loop
  8. set /a n=%random%%%4+1
  9. if "%n%"=="%m%" goto loop
  10. set count=0
  11. 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")
  12. set /p in=请输入组合密码%p%%q%:
  13. if not defined in echo fail & pause & goto exit
  14. for /f %%b in ('call echo %%%p%%%') do set "answer=%%b"
  15. for /f %%c in ('call echo %%%q%%%') do set "answer=%answer%%%c"
  16. if "%in%"=="%answer%" echo pass & pause && goto exit
  17. echo fail & pause
  18. :exit
BJSH发表于: 2007-04-15 15:57
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
htysm +2 2007-04-17 05:25
3 发表于 2007-04-16 05:16 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by bjsh at 2007-4-16 05:08:
试试这个呢

bjsh 兄
多写了 setlocal enabledelayedexpansion 哦,呵呵,因为你没有用
4 发表于 2007-04-16 05:24 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
第11句用了呀;呵呵
5 发表于 2007-04-16 05:25 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by bjsh at 2007-4-16 05:24:
第11句用了呀;呵呵

哦,怪我没有仔细看,不过怎么下面没有用,像这个%%%p%%%
6 发表于 2007-04-16 05:25 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
我记得set 有个可以连续赋值的;
也就是2 3 4 5行本来可以合成一行的;一下想不起如何连续赋值了;

哪位给提醒下啊!
7 发表于 2007-04-16 05:29 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
Originally posted by vkill at 2007-4-15 04:25 PM:

哦,怪我没有仔细看,不过怎么下面没有用,像这个%%%p%%%


真是的;用call用顺手了;直接就几个百分号上去了;
8 发表于 2007-04-16 05:53 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by bjsh at 2007-4-16 05:25:
我记得set 有个可以连续赋值的;
也就是2 3 4 5行本来可以合成一行的;一下想不起如何连续赋值了;

哪位给提醒下啊!

大概这个样子
set "v=!v!%%?"
9 发表于 2007-04-16 06:04 ·  中国 上海 浦东新区 电信
初级用户
积分 21
发帖 10
注册 2007-03-30 02:03
19年会员
UID 83335
性别 男
状态 离线
bjsh不愧是高手,如果我要增加如:a2,b2,c2,d2.....我要改什么?setlocal enabledelayedexpansion是什么意思?
10 发表于 2007-04-16 06:21 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线

如果我要增加如: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...什么的加进去以空格分开;
11 发表于 2007-04-16 12:02 ·  中国 上海 长宁区 电信
初级用户
积分 38
发帖 15
注册 2007-04-13 20:38
19年会员
UID 85037
性别 男
状态 离线
哈哈 没看懂 有没人翻译下?
set /a m=%random%%%4+1 里面面%%4是什么意思
for /f %%b in ('call echo %%%p%%%') do set "answer=%%b"
%%%p%%% 这个为什么这么多%号?
哈哈要是有人翻译下 第11句就更好了
12 发表于 2007-04-16 12:19 ·  中国 广东 广州 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
setlocal enabledelayedexpansion
搜索变量延迟

set /a m=%random%%%4+1,在批处理里面%是转移字符,%%这个在命令行下面为%,就是set /a m=%random%%4+1,而set /a下面%意思为整除,所以这个就是把m的值设为一个随机数正常4后再加上1;
那么多%的原因参照上面的:%为转移字符
13 发表于 2007-04-16 12:37 ·  中国 广东 广州 联通
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
bjsh,,关于连续赋值是 :

set /a a=1,b=2,c=3,d=4

这样就把几个值给确定了。。。。
知,不觉多。不知,乃求知
14 发表于 2007-04-16 21:16 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
谢flyinspace兄
15 发表于 2007-04-17 04:31 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
没看明白~~~~残念~~~~~~~
论坛跳转: