在 IF 语句中正确使用变量(批处理脚本)

在 IF 语句中正确使用变量(批处理脚本)

我目前正在尝试创建一个安装程序批处理文件。目前,代码只是我试图弄清楚 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),但是还有很多不必要的GOTOs 和ECHOs,它们似乎并没有真正起到什么作用(:START,,:STOP你的第二个GOTO INSTALLECHO没有变量的行只说一个单词,等等)。

我通常发现另一件有用的事情是将) ELSE (语句放在块的最后一行末尾,IF如下所示:

IF "%asset:~2,2%"=="2." (
    ECHO IP
    GOTO INSTALL ) ELSE (
    ECHO Selection is not an IP.
    GOTO CASSET
)

它可以帮助您避免嵌套语句时的一些麻烦,因为ELSE本身并不是命令 - 它只是 的一个选项IF。我还建议使用Tab来帮助识别嵌套语句中的级别,尽管这是个人偏好。如果您更新问题并更详细地说明您要完成的任务,我们很乐意帮助您完成其他工作,我会在答案中添加更多内容。

参考:IF 语句

相关内容