我目前正在尝试创建一个安装程序批处理文件。目前,代码只是我试图弄清楚 IF 语句的工作原理。我还没有包含安装程序等的代码。
我不知道我哪里做错了。当我运行下面的脚本时,我输入了一些随机文本,希望它不会到达第一个 IF 语句的代码,但它确实到达了。我的第一个 IF 语句是检查它是否是 IP。我输入了“test”,但它仍然运行第一个 IF 语句中的代码。它将转到“INSTALL”,然后运行下面的代码。
@echo off
:START
SET /P asset=APPLICATION INSTALLER. Please enter IP Address or Asset Number:
CALL IF "%asset:~2,2%"=="2." (
ECHO IP
GOTO INSTALL
) ELSE (
ECHO Selection is not an IP.
GOTO CASSET
)
:CASSET
CALL IF /I NOT "%asset:~0,5%"=="C-" (
ECHO ASSET
SET asset="C-%asset%"
GOTO INSTALL
)
:INSTALL
echo %asset%
cmd /k
pause
:STOP
ECHO Invalid IP or Asset number provided.
pause
我做错了什么?有人能解释一下我明显的错误吗?
答案1
什么 @阿希普夫尔在他们的评论中说过(删除CALL
你的语句前面的 s IF
),但是还有很多不必要的GOTO
s 和ECHO
s,它们似乎并没有真正起到什么作用(:START
,,:STOP
你的第二个GOTO INSTALL
,ECHO
没有变量的行只说一个单词,等等)。
我通常发现另一件有用的事情是将) ELSE (
语句放在块的最后一行末尾,IF
如下所示:
IF "%asset:~2,2%"=="2." (
ECHO IP
GOTO INSTALL ) ELSE (
ECHO Selection is not an IP.
GOTO CASSET
)
它可以帮助您避免嵌套语句时的一些麻烦,因为ELSE
本身并不是命令 - 它只是 的一个选项IF
。我还建议使用Tab来帮助识别嵌套语句中的级别,尽管这是个人偏好。如果您更新问题并更详细地说明您要完成的任务,我们很乐意帮助您完成其他工作,我会在答案中添加更多内容。
参考:IF 语句