我一直坚持这个愚蠢的if语句,无论我做什么,我都无法得到if语句去正确的标签。
你能帮忙吗?
:getConfirmation
set /p confirmDeploy =Confirm deployment of code [y/n] ?:
if "%confirmDeploy%"=="y". goto deployCode
if "%confirmDeploy%"=="n". goto cancelDeploy
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
答案 0 :(得分:16)
试试这个:
@echo off
:getConfirmation
set /p confirmDeploy=Confirm deployment of code [y/n] ?:
if %confirmDeploy%==y goto :deployCode
if %confirmDeploy%==n goto :cancelDeploy
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
答案 1 :(得分:3)
如果我们忽略了所需输入为y的事实。或者(由于。比较中的。),没有人注意到c14kaa脚本的实际问题(除了Nick DeVore,但没有说明原因)。原始脚本有行
set / p confirmDeploy =确认代码[y / n]的部署?:
Nick提到这并未将响应放入变量中。那是因为它将响应放入“confirmDeploy”(空间是变量名称的一部分,只是cmd输入解析的另一个缺点)。因此,当c14kaa使用%confirmDeploy%时,它将扩展到%confirmDeploy%(即字面意思),除非该变量已在其他地方设置。我只能假设c14kaa已关闭回声,因为confirmDeploy没有替代(或包含y或n以外的东西)的事实将是一个很大的线索。它本来也揭示了问题。在if语句中。
至于其他建议,当变量为空时,在变量周围加上“”(因此需要在匹配字符串中)是首选,以停止语法错误(生成语句'if == y',jeb表示的意思是“失败”),:在goto中的标签名称被忽略之前,在John的版本中/ I之后需要有一个空格(即使if命令只有一个选项,一些命令有很多,它们可以放在像“findstr / ivn ...”这样的空格一起标记列表的结尾。
我要做的唯一其他评论是c14kaa假定用户将始终输入正确的响应(y或n),否则脚本将“落入”:deployCode部分(可能不是理想的默认行为) 。这解释了Matt对该建议的回应(回声不良输入)。由于响应被放入confirmDeploy< space>这意味着两个测试(使用confirmDeploy没有空格)都失败了。
考虑到上述所有内容,我们留下了Reny的版本(添加了一些解释)。
答案 2 :(得分:1)
你是在正确的轨道上,只需要清理语法和间距错误。这将有效:
@echo off
:getConfirmation
set /p confirmDeploy=Confirm deployment of code [y/n] ?:
if /I "%confirmDeploy%"=="y" goto deployCode
if /I "%confirmDeploy%"=="n" goto cancelDeploy
REM added goto getConfirmation in case of invalid responses
goto getConfirmation
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
答案 3 :(得分:0)
问题是你的测试都没有效果。您正在检查用户输入y.
或n.
之类的内容(但我认为您实际上无法输入任何匹配的内容)。
尝试:
if "%confirmDeploy%".=="y". goto deployCode
if "%confirmDeploy%".=="n". goto cancelDeploy
echo bad input
goto getConfirmation
...
答案 4 :(得分:0)
试试这个:
@echo off
:getConfirmation
set /p confirmDeploy=Confirm deployment of code [y/n] ?:
if /I%confirmDeploy%==y goto :deployCode
if /I%confirmDeploy%==n goto :cancelDeploy
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
/ I参数使其不区分大小写。