Windows批处理文件错误在if语句中的变量名上

时间:2018-06-19 18:44:50

标签: batch-file cmd

@IF [%PORT%] == [] ( 
@echo Error : Com port not specified 
goto end
) ELSE (
    IF  x%PORT:COM=%==x%PORT% (
        @echo ERROR: Com port name invalid
        goto end
    )
)

我收到错误提示

  

=此刻端口是意外的。

外部if语句成功

1 个答案:

答案 0 :(得分:1)

您的代码中的问题是,即使IF x%PORT:COM=%==x%PORT%为空,行PORT也会被解析,并且由于使用了sub-string substitution(实际上是空变量而中止),因此扩展行是语法无效。

要解决此问题,请不要使用else,而应将其作为单独的if语句编写,因此如果PORT未定义,则不会对其进行解析:

if not defined PORT ( 
    echo ERROR: COM port not specified
    goto end
)
if "%PORT:COM=%"=="%PORT%" (
    echo ERROR: COM port name invalid
    goto end
)

此外,我在比较表达式两边加上了引号,建议这样做以避免出现特殊字符。此外,要检查变量是否为空,我使用了if defined而不是进行比较。