标题: 批处理密码猜测 [打印本页]
作者: rogue_1983 时间: 2010-7-30 12:51 标题: 批处理密码猜测
运用%random%猜测三位数密码,先设定密码为888,然后猜测出密码是888并显示出来,然后显示:“密码已获取,欢迎进入”,并自动把密码写入mima.txt里面。如果密码在获取中,则显示:正在获取密码请等待! 最好能看出密码猜测了多少次?
[ 本帖最后由 rogue_1983 于 2010-7-30 13:53 编辑 ]
作者: zcydez 时间: 2010-7-30 13:41
- @echo off
- :a
- cls
- set /a pass1=%random%%%1000
- echo 猜测中
- echo 当前密码:%pass1%
- if %pass1%==888 goto b
- goto a
- :b
- echo 密码已获取,欢迎进入
- echo 888>mima.txt
- pause
复制代码
[ 本帖最后由 zcydez 于 2010-7-30 13:44 编辑 ]
作者: rogue_1983 时间: 2010-7-30 13:48
可以,但是最好能显示出变量%random% 一共猜测了多少次!
作者: zcydez 时间: 2010-7-30 13:51
显示猜了多少次:
- @echo off
- set ci=0
- :a
- cls
- set /a pass1=%random%%%1000
- echo 猜测中
- echo 当前密码:%pass1%
- set /a ci=%ci%+1
- if %pass1%==195 goto b
- goto a
- :b
- echo 密码已获取,欢迎进入
- echo 猜了%ci%次
- echo 888>mima.txt
- pause
复制代码
作者: rogue_1983 时间: 2010-7-30 13:56
这次不错,呵呵。
作者: rogue_1983 时间: 2010-7-30 14:13
有没有高手写出排除已猜出过的密码,使其更加简单快速啊?
[ 本帖最后由 rogue_1983 于 2010-7-30 19:21 编辑 ]
作者: canyuexiaolang 时间: 2010-7-30 15:39
- @echo off&setlocal EnableDelayedExpansion
- :_start
- for,/l,%%i,in,(1 1 1000),do,(set pass=!random:~-3!&echo 正在猜测密码:!pass!&cls
- if "!pass!"=="888" set a=%%i&echo !pass!>mima.txt&goto exit
- if "%%i"=="1000" set /a n=1000+n&goto _start)
- :exit
- set /a a=a+n&echo,共猜测:!a!次,密码是:!pass!&pause
复制代码
用for不是更好?
稍稍修改。。
[ 本帖最后由 canyuexiaolang 于 2010-7-30 15:44 编辑 ]
作者: caruko 时间: 2010-7-30 17:53
888是1/1000的几率,如果运气不好,跑个1万次,10万次也没碰到888怎么办? 肯定猜测一个之后就要标记这个密码,之后不用再猜测了。
作者: rogue_1983 时间: 2010-7-30 22:09 标题: 谢谢你的指正,疏忽了。呵呵
@echo off
:a
set /a var=%random%%%900
set /a vas+=1
if %var%==888 (
echo %var% >>mima.txt&echo 已获取密码为:%var%&echo 一共猜测了%vas%次&goto :b) else (
goto :c)
:b
echo 密码正确欢迎进入!^^^-^^!&pause&goto quit
:c
echo 正在获取密码,请等待……&echo %var%&goto :a
pause
[ 本帖最后由 rogue_1983 于 2010-7-31 19:21 编辑 ]
作者: canyuexiaolang 时间: 2010-7-31 08:47
楼主表灰心...
先给你纠正一下错误
1.上边的代码有2个标签a
2.没有标签quit
if的判断最好加上引号
eg:if "%vas%"=="888" Command...
然后我来解释我的代码。。
先去除一下没用的东西...整理代码- @echo off&setlocal EnableDelayedExpansion
-
- rem 开启变量延迟。大家可以测试一下,如果不开启变量延迟是不可以滴...
- rem 开启变量延迟,要把要延迟的变量的 % 变成 !
-
- :_start
-
- for /l %%i in (1 1 1000) do (
-
- rem for循环,循环1000次
-
- set pass=!random:~-3!
- echo 正在猜测密码:!pass!&cls
-
- rem 生成随机数,截取最后3位。
-
- if "!pass!"=="888" set a=%%i&echo !pass!>mima.txt&goto exit
-
- rem IF判断pass变量的值是否为888,如果为888则把%%i的值赋给a,
- rem 把pass写入mima.txt然后跳转到exit,否则继续执行程序
-
- if "%%i"=="1000" set /a n=1000+n&goto _start
-
- rem IF判断%%i是否为1000,如果是1000,则把%%i的值赋给n。
- rem 则n的值就为1000,2000,3000...然后在跳转到_start
-
- )
- :exit
- set /a a=a+n
- echo 共猜测:!a!次,密码是:!pass!
- pause
-
- rem 把n+a的值赋给a,a是1000次循环循环完毕的次数,它是小于等于1000的,
- rem 而n的值是总共循环了n次,再把n*1000
复制代码
作者: fish 时间: 2010-8-6 18:58 标题: 给楼主前辈写一个四次以内必中的,写的不好莫见怪哈。。。
- @echo off
- set c=1
- set n=0
- set pwd=888
- set t=1000
-
- echo 正在获取密码请等待!
- :start
- set /a p=%random%%%%t%+%n%
- if %p%==%pwd% (
- echo 您共猜了%c%次,密码已获取,欢迎进入。
- echo %p%>>mima.txt
- pause>nul
- exit
- )
- set /a t/=10
- set /a n=%pwd%-%t%+1
- set /a c+=1
- goto start
复制代码
作者: rogue_1983 时间: 2010-8-6 22:41 标题: 回复 11楼 的帖子
首先赞赏你对次帖的态度,你的代码看过了,有些不太懂,不过,我需要指出的是,没有过程,让别人看不到运行过程,就像直接显示出来似的,我发这个帖子只是给我这样的菜鸟练习一些命令的。呵呵
作者: fish 时间: 2010-8-7 13:28 标题: 回复 12楼 的帖子
前辈只需在我的代码上稍动手脚即可轻松看见过程的啊,不懂的地方可以提,我们大家可以共同探讨进行学术交流嘛,但是不建议不思考就提问哦,还有怎么弄得我跟老鸟似的,我也是地地道道的菜鸟一只哦,再有学习该是无贵贱与长幼之分吧,菜鸟怎么了,菜鸟只要始终如一地坚持真理,终有一天也必将成为老鸟哦,闻道有先后,术业有专攻,如是而已呦。。。- @echo off
- set c=1
- set n=0
- set pwd=888
- set t=1000
-
- echo 正在获取密码请等待!
- :start
- set /a p=%random%%%%t%+%n%
- echo 第%c%次猜的密码是%p%
- if %p%==%pwd% (
- echo 您共猜了%c%次,密码已获取,欢迎进入。
- echo %p%>>mima.txt
- pause>nul
- exit
- )
- set /a t/=10
- set /a n=%pwd%-%t%+1
- set /a c+=1
- goto start
复制代码
作者: smallpigs 时间: 2010-10-28 14:46
- @echo off
- set ccols=60
-
- set /a pass2=888
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo ----------------------------------------------------------------
- echo 正在獲取密碼請等待!
- echo ----------------------------------------------------------------
- :pass1
- set /a pass=%random%%%1000+100
- set /a a=a+1
- if %pass% neq %pass2% goto pass1
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo ----------------------------------------------------------------
- echo 密碼已獲取,共猜測%a%次,歡迎進入!
- echo ----------------------------------------------------------------
- echo %pass%>main.txt
- pause >nul
复制代码
哈哈,太無聊了!
作者: weichenxiehou 时间: 2010-10-28 18:02
- @echo off
- set mima=888
- set times=0
-
- :behav
- set /a pass=%random%%%1000
- if "%pass%"=="%mima%" (
- echo 密码%pass%已获取,欢迎进入
- goto end)
- else (
- set /a times =1
- echn 密码正在获取,请等待…%times%次不匹配
- goto behav)
-
- :end
- pause
复制代码
如果不用随机数,是不是很简单呢?
[ 本帖最后由 weichenxiehou 于 2010-10-28 18:15 编辑 ]
作者: we6540 时间: 2011-2-2 17:03
@echo off
:3
cls
set /a b+=1
set /a a=%random%%%1000
if "%a%" == "888" goto 1
if not "%a%" == "888" goto 2
:1
echo 共获取%b%次
echo 然后猜测出密码是%a%并显示出来
pause
exit
:2
echo 正在获取密码请等待!
goto 3
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |