返回列表 发帖

批处理密码猜测

运用%random%猜测三位数密码,先设定密码为888,然后猜测出密码是888并显示出来,然后显示:“密码已获取,欢迎进入”,并自动把密码写入mima.txt里面。如果密码在获取中,则显示:正在获取密码请等待! 最好能看出密码猜测了多少次?

[ 本帖最后由 rogue_1983 于 2010-7-30 13:53 编辑 ]

@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

TOP

@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
pauseCOPY

如果不用随机数,是不是很简单呢?

[ 本帖最后由 weichenxiehou 于 2010-10-28 18:15 编辑 ]

TOP

@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 >nulCOPY


哈哈,太無聊了!

TOP

回复 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 startCOPY

TOP

回复 11楼 的帖子

首先赞赏你对次帖的态度,你的代码看过了,有些不太懂,不过,我需要指出的是,没有过程,让别人看不到运行过程,就像直接显示出来似的,我发这个帖子只是给我这样的菜鸟练习一些命令的。呵呵

TOP

给楼主前辈写一个四次以内必中的,写的不好莫见怪哈。。。

@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 startCOPY
1

评分人数

TOP

楼主表灰心...
先给你纠正一下错误
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*1000COPY
1

评分人数

TOP

谢谢你的指正,疏忽了。呵呵

@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 编辑 ]

TOP

888是1/1000的几率,如果运气不好,跑个1万次,10万次也没碰到888怎么办? 肯定猜测一个之后就要标记这个密码,之后不用再猜测了。

TOP

@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!&pauseCOPY
用for不是更好?

稍稍修改。。

[ 本帖最后由 canyuexiaolang 于 2010-7-30 15:44 编辑 ]
1

评分人数

    • rogue_1983: 方法独特,就是感觉挺复杂的PB + 3

TOP

有没有高手写出排除已猜出过的密码,使其更加简单快速啊?

[ 本帖最后由 rogue_1983 于 2010-7-30 19:21 编辑 ]

TOP

这次不错,呵呵。

TOP

显示猜了多少次:




@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
pauseCOPY

TOP

可以,但是最好能显示出变量%random%    一共猜测了多少次!

TOP

返回列表