Board logo

标题: 批处理密码猜测 [打印本页]

作者: 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

  1. @echo off
  2. :a
  3. cls
  4. set /a pass1=%random%%%1000
  5. echo 猜测中
  6. echo 当前密码:%pass1%
  7. if %pass1%==888 goto b
  8. goto a
  9. :b
  10. echo 密码已获取,欢迎进入
  11. echo 888>mima.txt
  12. pause
复制代码

[ 本帖最后由 zcydez 于 2010-7-30 13:44 编辑 ]
作者: rogue_1983    时间: 2010-7-30 13:48

可以,但是最好能显示出变量%random%    一共猜测了多少次!
作者: zcydez    时间: 2010-7-30 13:51

显示猜了多少次:




  1. @echo off
  2. set ci=0
  3. :a
  4. cls
  5. set /a pass1=%random%%%1000
  6. echo 猜测中
  7. echo 当前密码:%pass1%
  8. set /a ci=%ci%+1
  9. if %pass1%==195 goto b
  10. goto a
  11. :b
  12. echo 密码已获取,欢迎进入
  13. echo 猜了%ci%次
  14. echo 888>mima.txt
  15. 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

  1. @echo off&setlocal EnableDelayedExpansion
  2. :_start
  3. for,/l,%%i,in,(1 1 1000),do,(set pass=!random:~-3!&echo 正在猜测密码:!pass!&cls
  4. if "!pass!"=="888" set a=%%i&echo !pass!>mima.txt&goto exit
  5. if "%%i"=="1000" set /a n=1000+n&goto _start)
  6. :exit
  7. 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...
然后我来解释我的代码。。
先去除一下没用的东西...整理代码
  1. @echo off&setlocal EnableDelayedExpansion
  2. rem 开启变量延迟。大家可以测试一下,如果不开启变量延迟是不可以滴...
  3. rem 开启变量延迟,要把要延迟的变量的 % 变成 !
  4. :_start
  5. for /l %%i in (1 1 1000) do (
  6. rem for循环,循环1000次
  7.      set pass=!random:~-3!
  8.      echo 正在猜测密码:!pass!&cls
  9. rem 生成随机数,截取最后3位。
  10.      if "!pass!"=="888" set a=%%i&echo !pass!>mima.txt&goto exit
  11. rem IF判断pass变量的值是否为888,如果为888则把%%i的值赋给a,
  12. rem 把pass写入mima.txt然后跳转到exit,否则继续执行程序
  13.      if "%%i"=="1000" set /a n=1000+n&goto _start
  14. rem IF判断%%i是否为1000,如果是1000,则把%%i的值赋给n。
  15. rem 则n的值就为1000,2000,3000...然后在跳转到_start
  16. )
  17. :exit
  18. set /a a=a+n
  19. echo 共猜测:!a!次,密码是:!pass!
  20. pause
  21. rem 把n+a的值赋给a,a是1000次循环循环完毕的次数,它是小于等于1000的,
  22. rem 而n的值是总共循环了n次,再把n*1000
复制代码

作者: fish    时间: 2010-8-6 18:58     标题: 给楼主前辈写一个四次以内必中的,写的不好莫见怪哈。。。

  1. @echo off
  2. set c=1
  3. set n=0
  4. set pwd=888
  5. set t=1000
  6. echo 正在获取密码请等待!
  7. :start
  8. set /a p=%random%%%%t%+%n%
  9. if %p%==%pwd% (
  10. echo 您共猜了%c%次,密码已获取,欢迎进入。
  11. echo %p%>>mima.txt
  12. pause>nul
  13. exit
  14. )
  15. set /a t/=10
  16. set /a n=%pwd%-%t%+1
  17. set /a c+=1
  18. goto start
复制代码

作者: rogue_1983    时间: 2010-8-6 22:41     标题: 回复 11楼 的帖子

首先赞赏你对次帖的态度,你的代码看过了,有些不太懂,不过,我需要指出的是,没有过程,让别人看不到运行过程,就像直接显示出来似的,我发这个帖子只是给我这样的菜鸟练习一些命令的。呵呵
作者: fish    时间: 2010-8-7 13:28     标题: 回复 12楼 的帖子

前辈只需在我的代码上稍动手脚即可轻松看见过程的啊,不懂的地方可以提,我们大家可以共同探讨进行学术交流嘛,但是不建议不思考就提问哦,还有怎么弄得我跟老鸟似的,我也是地地道道的菜鸟一只哦,再有学习该是无贵贱与长幼之分吧,菜鸟怎么了,菜鸟只要始终如一地坚持真理,终有一天也必将成为老鸟哦,闻道有先后,术业有专攻,如是而已呦。。。
  1. @echo off
  2. set c=1
  3. set n=0
  4. set pwd=888
  5. set t=1000
  6. echo 正在获取密码请等待!
  7. :start
  8. set /a p=%random%%%%t%+%n%
  9. echo 第%c%次猜的密码是%p%
  10. if %p%==%pwd% (
  11.         echo 您共猜了%c%次,密码已获取,欢迎进入。
  12.         echo %p%>>mima.txt
  13.         pause>nul
  14.         exit
  15. )
  16. set /a t/=10
  17. set /a n=%pwd%-%t%+1
  18. set /a c+=1
  19. goto start
复制代码

作者: smallpigs    时间: 2010-10-28 14:46

  1. @echo off
  2. set ccols=60
  3. set /a pass2=888
  4. echo.
  5. echo.
  6. echo.
  7. echo.
  8. echo.
  9. echo.
  10. echo.
  11. echo.
  12. echo.
  13. echo ----------------------------------------------------------------
  14. echo 正在獲取密碼請等待!
  15. echo ----------------------------------------------------------------
  16. :pass1
  17. set /a pass=%random%%%1000+100
  18. set /a a=a+1
  19. if %pass% neq %pass2% goto pass1
  20. cls
  21. echo.
  22. echo.
  23. echo.
  24. echo.
  25. echo.
  26. echo.
  27. echo.
  28. echo.
  29. echo.
  30. echo ----------------------------------------------------------------
  31. echo 密碼已獲取,共猜測%a%次,歡迎進入!
  32. echo ----------------------------------------------------------------
  33. echo %pass%>main.txt
  34. pause >nul
复制代码


哈哈,太無聊了!
作者: weichenxiehou    时间: 2010-10-28 18:02

  1. @echo off
  2. set mima=888
  3. set times=0
  4. :behav
  5. set /a pass=%random%%%1000
  6. if "%pass%"=="%mima%" (
  7. echo 密码%pass%已获取,欢迎进入
  8. goto end)
  9. else (
  10. set /a times =1
  11. echn 密码正在获取,请等待…%times%次不匹配
  12. goto behav)
  13. :end
  14. 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