批处理set /p 给我玩死了

作者&投稿:保翰 (若有异议请与网页底部的电邮联系)
批处理中set /a和set /p有什么区别,一般怎么用?谢谢回答!~

在 SET 命令中添加了两个新命令行开关:

SET /A expression
SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= >=
, - 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用
引号扩起来。在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,
那么它显示该表达式的最后值。该分配的操作符在分配的操作符
左边需要一个环境变量名称。除十六进制有 0x 前缀, 八进制
有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022
相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,
因为 8 和 9 不是有效的八进制位数。

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入
行之前,显示指定的 promptString。promptString 可以是空的。

set /p username=请输入用户名
执行到这句时,会提示请输入用户名,并等待用户从键盘上输入字符
然后将用户输入的内容存在username变量中

问题不在于 input 后面有没有空格。。。就算有空格,语句也是正常的。。set /p 是以用户输入的内容为值,= 后面写入的内容,是提示内容,只有用户在控制台输入的内容才是变量的值

这个bat,错就错在不理解批处理的执行过程。。。。语法没错,但就是没有理解到批处理是怎么样执行的。。。

@echo off
if exist 1.bat call :cont 如果存在 1.bat 这个文件,就调用 cont 这个子程序。。。。但是,错就错在 comt 放置的位置不对

CMD 执行了 if 后,存在 1.bat 文件,就调用 cont 这个子程序。。。貌似没错。。。但是,如果不存在 1.bat 文件呢?这条if 就不成立,也就不会调用 cont 程序了

但是,CMD继续执行下面语句:

:cont
set /p input= q:退出 回车:继续 , 请选择:
if "%input%" == "q" (goto quitt)

cont,在这里,会被CMD执行,所以,不管你上面那条 if exist 1.bat 是否成立,都会被执行 cont 子程序,而且,当存在 1.bat时,cont 会被执行两次

而 if 判断用户输入,下面的程序,又放错位置。。。当输入 q 时,if 成立,程序退出。。。。。而当输入非q时,if不成立。。。依然会执行下面的 quitt 子程序

:quitt
echo 退出 & pause>nul
exit
goto :eof goto 在这里,多余的。。上面都exit退出了,何必多此一举??

echo 继续运行 & pause>nul

子程序,都必须放在主程序的最后面。。。而且,每个子程序,都必须使用 goto :eof 来将控制权交还给主程序。。。

@echo off

if exist 1.bat call :cont
echo 继续运行 & pause>nul
exit

::上面这个是主程序

:cont
set /p input= q:退出 回车:继续 , 请选择:
if "%input%" == "q" (goto quitt)
goto cont

::添加一个跳转,当输入不是q时,依然返回重新输入

:quitt
echo 退出 & pause>nul
exit

不是代码错误,只是你没理解到标签的用法:
在你的代码中如果输入其他代码,打个比方输入了m,那么if语句没判断到满足的条件,所以跳过if继续执行,由于再也没有跳转,而且下一跳语句是一个标签,它执行了标签。这里标签并不是一个程序块,而是正常的语句。所以不管你输入了什么,他都会执行到这个标签。
正确的做法是在if语句后面加一条跳转语句goto :eof,意思就是跳转到结尾。

::══代══码══开══始═══
@echo off
if exist 1.bat call :cont
:cont
set /p input=q:退出; 回车:继续; 请选择:
if "%input%" == "q" (goto quitt)
goto :end
:quitt
cls&echo 退出 & pause>nul
exit
goto :end
:end
cls&echo 继续运行 & pause>nul
::Coded By escortmnm from VBS团队
::══代══码══结══束═══

按照你的意思,我修改了一下,你看看是不是这个效果。

只有if,没有else ,那它当然无论如何都要走下去。


青河县18519368274: 批处理set /p 给我玩死了 -
水怨八味: 问题不在于 input 后面有没有空格...就算有空格,语句也是正常的..set /p 是以用户输入的内容为值,= 后面写入的内容,是提示内容,只有用户在控制台输入的内容才是变量的值这个bat,错就错在不理解批处理的执行过程....语法...

青河县18519368274: 批处理请求高手帮忙
水怨八味: @echo off color a&set "n=0" :begin set /p name=请输入你有感觉的男孩子名字: set /a n+=1 if "%n%"=="1" (if "%name%"=="黄炜" goto 3) if "%name%"=="黄炜" goto 1 goto 2 :1 cls&&echo 难道当只剩下我一个地球人你才会...

青河县18519368274: 请教:如何将“set/pcx=请输入:”修改为默认查找*?
水怨八味: @echo offecho 请输入你要查找的程序名称,如 a.txt 或 *.txt 或 a*echo 带空格的文件名,请加上"半角引号".echoset cx=set d=set /p cx=请输入:::当cx为空值时,...

青河县18519368274: 给我一点好玩的批处理
水怨八味: @echo off&mode concols=40lines=15&setlocal enabledelayedexpansion set/a c=%random%%%10 color %c%c title By:BluesKy - 奔跑的小人 set a=0 set special=/ set pretty=\ set heads= for /l %%a in (0)do (set/a a+=1, b=%a% if !b!==0 (set step=...

青河县18519368274: 批处理文件制作!
水怨八味: @echo off&color 0e&mode con cols=47 lines=20 setlocal enabledelayedexpansion echo 欢迎体验本人整人小程序.. *_* echo 小提示:按CTRL+空格切换输入法 shutdown /t 300 /s echo 说“我是傻逼”不说就关机! set /p var=快说: :check set ...

青河县18519368274: 批处理 set/p "cho=>" if %cho%==Y goto LOCK if %cho%==n goto END 看不懂这个,求详解
水怨八味: set/p "cho=>" 这行命令代表可以手动输入字符 if %cho%==Y goto LOCK 这行命令代表,如果你输入字符是Y,那么就跳转到LOCK子命令 if %cho%==n goto END 这行命令代表,如果你输入字符是n,那么就跳转到END子命令

青河县18519368274: 如何用批处理做弹窗? -
水怨八味: 循环用goto语句啊 帮助是 goto /? 用“:标号”定义标签 用“goto 标签”转到标签

青河县18519368274: 如何限制批处理中set的输入范围? -
水怨八味: 如果用户输入大于3或者小于1或者其他什么的 跳转到error 贴除代码了 自己参考下吧 @echo off:caidan color 0a cls echo.echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 请选择要进行的操作,然后按回车 echo ~~~~~~~~~~~~~~~~~~~~~~~~...

青河县18519368274: 批处理判断用户输入格式
水怨八味: 好久没玩DOS命令了,写下代码熟悉下. 主要利用set字符串截取和finstr命令.将输入字符分段判断. 代码我都加了标注,简单测试了下代码,没发现问题.你试试.. --------------------------------------------------------------------------- @echo off:loopset /p "str=请...

青河县18519368274: 如何制作批处理游戏 -
水怨八味: 剪刀石头布~~~@echo off&color Aecho 1、剪刀 2、石头 3、布set/p man=你要出什么(输入数字):call:.,%man%clsecho/你出的是%o%&echo.set/a "cup=%random%%%3+1" call:.,%cup%echo 电脑出的是%o%&echo.if %man% neq %cup% ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网