标题: [数值计算] [已解决]批处理如何判断SET /P的输入次数? [打印本页]
作者: common 时间: 2011-6-2 22:41 标题: [已解决]批处理如何判断SET /P的输入次数?
本帖最后由 common 于 2011-6-3 20:30 编辑
如题:请教,如何判断SET /P的输入次数
我要判断SET /P 如果6次输入错误就EXIT程序,这个次数判断如何来写?
还有goto的循环次数,如我想一个goto循环100次退出,代码如何写?
作者: CrLf 时间: 2011-6-2 22:49
本帖最后由 zm900612 于 2011-6-2 22:51 编辑
可以用for循环来解决- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1 1 6) do (
- if not defined right set /p input=input
- if "!input!"=="right" set right=yes
- )
- if not defined right exit
- echo right
- pause
复制代码
也可以用goto来解决- @echo off&setlocal enabledelayedexpansion
- :again
- set /p input=input
- set /a n+=1
- if "!input!" neq "right" (
- if %n% lss 6 goto again else exit
- )
- echo right
- pause
复制代码
作者: batman 时间: 2011-6-2 22:49
- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,6) do (
- set "psw="
- cls&set /p psw=请输入密码(你只有6次机会):
- if /i "!pws!" equ "bathome" goto next
- )
- echo 6次输入错误,程序将自动退出。
- ping /n 3 127.1>nul&goto :eof
- :next
- echo 密码输入正确,程序开始运行。。。
- pause>nul
复制代码
作者: common 时间: 2011-6-2 23:07
谢谢两位: 待验证后改已解决标题
请问一下zm900612版主,你文中的right是个变量,还是你只是做为例子假设的一个值
作者: common 时间: 2011-6-3 10:35
本帖最后由 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输入还不对,就退出程序
作者: cjiabing 时间: 2011-6-3 13:14
好好学学if和set。
-
- @echo off
- set 计数=1
- :输入模块
- cls
- echo,
- echo 第 %计数% 次
- echo,
- set /p 输入=请输入密码(你只有六次重新输入的机会):
- if "%输入%"=="" goto 输入模块
- set /a 计数+=1
- if "%输入%"=="123456" goto 输入正确
- if /i "%计数%" leq "6" (goto 输入模块) else (goto :eof)
- exit
- :输入正确
- echo;
- echo 密码输入正确!
- echo;
- pause
复制代码
要循环一百次的话,把“if /i "%计数%" leq "6" ”里的“6”换成“100”就可以了。
发现伸手党很多,最好还是亲自去学习,否则永远不懂。
当然,多研究论坛里的作品,收效应该会很高!~
作者: mxxcgzxxx 时间: 2011-6-3 13:32
本帖最后由 mxxcgzxxx 于 2011-6-3 13:42 编辑
5# common - if %max% gtr 1000 (goto max)
- if %max% lss 100 (goto max)
复制代码
这两句在FOR内部所以不起作用,建议学习FOR与变量延时、预处理的知识。
可以关闭ECHO OFF就可以看到%max%在FOR内部始终为空,
解决:程序头加一句
setlocal EnableDelayedExpansion
然后把 FOR句块内的%max% 改成 !max!
初学者没什么不好意思的,大家都这样过来的!
学不会也没什么不好意思的,学习就是要慢慢来!
问人也不是什么不好意思的,不问怎么进步嘛!
作者: common 时间: 2011-6-3 20:29
7# mxxcgzxxx
谢谢,按你的指引问题解决,但还是没太明白为什么一定加变量延迟与FOR中的调用要用!!
我会再努力学习
作者: CrLf 时间: 2011-6-3 20:49
8# common
变量延迟的意义是在语块中也能很方便地即时地动态读取变量值- @echo off
- set test=test
- echo test=%test% 语块外
- (
- set test=低调路过
- echo test=%test% 语块中,不使用变量延迟
- setlocal enabledelayedexpansion
- echo test=!test! 语块中,使用变量延迟
- )
- echo test=%test% 实际值
- pause
复制代码
当然还有几种办法即时不开启变量延迟也能实现同样的效果,但是代价都太大
作者: Batcher 时间: 2011-6-3 20:55
8# common
批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |