[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理如何判断SET /P的输入次数?

本帖最后由 common 于 2011-6-3 20:30 编辑

如题:请教,如何判断SET /P的输入次数
     我要判断SET /P 如果6次输入错误就EXIT程序,这个次数判断如何来写?
     还有goto的循环次数,如我想一个goto循环100次退出,代码如何写?
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

8# common


批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

8# common


变量延迟的意义是在语块中也能很方便地即时地动态读取变量值
  1. @echo off
  2. set test=test
  3. echo test=%test%     语块外
  4. (
  5.    set test=低调路过
  6.    echo test=%test%      语块中,不使用变量延迟
  7.   setlocal enabledelayedexpansion
  8.    echo test=!test!      语块中,使用变量延迟
  9. )
  10. echo test=%test%     实际值
  11. pause
复制代码
当然还有几种办法即时不开启变量延迟也能实现同样的效果,但是代价都太大

TOP

7# mxxcgzxxx


谢谢,按你的指引问题解决,但还是没太明白为什么一定加变量延迟与FOR中的调用要用!!
我会再努力学习

TOP

本帖最后由 mxxcgzxxx 于 2011-6-3 13:42 编辑

5# common
  1. if %max% gtr 1000 (goto max)
  2.   if %max% lss 100 (goto max)
复制代码
这两句在FOR内部所以不起作用,建议学习FOR与变量延时、预处理的知识。
可以关闭ECHO OFF就可以看到%max%在FOR内部始终为空,
解决:程序头加一句
setlocal EnableDelayedExpansion
然后把 FOR句块内的%max% 改成 !max!

初学者没什么不好意思的,大家都这样过来的!
学不会也没什么不好意思的,学习就是要慢慢来!
问人也不是什么不好意思的,不问怎么进步嘛!
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

好好学学if和set。

  1. @echo off
  2. set 计数=1
  3. :输入模块
  4. cls
  5. echo,
  6. echo     第 %计数% 次
  7. echo,
  8. set /p 输入=请输入密码(你只有六次重新输入的机会):
  9. if "%输入%"=="" goto 输入模块
  10. set /a 计数+=1
  11. if "%输入%"=="123456" goto 输入正确
  12. if /i "%计数%" leq "6" (goto 输入模块) else (goto :eof)
  13. exit
  14. :输入正确
  15. echo;
  16. echo 密码输入正确!
  17. echo;
  18. pause
复制代码


要循环一百次的话,把“if /i "%计数%" leq "6" ”里的“6”换成“100”就可以了。
发现伸手党很多,最好还是亲自去学习,否则永远不懂。
当然,多研究论坛里的作品,收效应该会很高!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 common 于 2011-6-3 10:38 编辑

请帮忙看下下面的代码,哪里错误,找了一天没找出问题:
@echo off
@color 4e
:max
for /l %%a in (1,1,10) do (
  echo %%a
  set /p max="请输入最大值:":你有一100次机会
  if %max% gtr 1000 (goto max)
  if %max% lss 100 (goto max)
  pause
)
PAUSE

单独运行:for /l %%a in (1,1,10) do (
  echo %%a)
显示正常

单独运行:
:max
  set /p max="请输入最大值:":你有一100次机会
  if %max% gtr 1000 (goto max)
  if %max% lss 100 (goto max)
此也正常

我的目的是最大值如果10输入还不对,就退出程序

TOP

谢谢两位: 待验证后改已解决标题
请问一下zm900612版主,你文中的right是个变量,还是你只是做为例子假设的一个值

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,6) do (
  3.       set "psw="
  4.       cls&set /p psw=请输入密码(你只有6次机会):
  5.     if /i "!pws!" equ "bathome" goto next
  6. )
  7. echo 6次输入错误,程序将自动退出。
  8. ping /n 3 127.1>nul&goto :eof
  9. :next
  10. echo 密码输入正确,程序开始运行。。。
  11. pause>nul
复制代码
***共同提高***

TOP

本帖最后由 zm900612 于 2011-6-2 22:51 编辑

可以用for循环来解决
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 6) do (
  3.    if not defined right set /p input=input
  4.    if "!input!"=="right" set right=yes
  5. )
  6. if not defined right exit
  7. echo right
  8. pause
复制代码
也可以用goto来解决
  1. @echo off&setlocal enabledelayedexpansion
  2. :again
  3. set /p input=input
  4. set /a n+=1
  5. if "!input!" neq "right" (
  6.    if %n% lss 6 goto again else exit
  7. )
  8. echo right
  9. pause
复制代码

TOP

返回列表