(此时出乎意料 - 批处理脚本

cho*_*ppy 11 scripting batch-file

我正在使用下面的批处理脚本并收到错误

(此时出乎意料.

我知道问题出在第一行,但我不明白出了什么问题.有任何想法吗 ?

脚本:

IF [%1]==[] (
    :LOOP1
    SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local      Area Connection 2]?[y/n]
    IF %isDefault%==y (
        SET from=1
        SET step=1
        SET to=10
        SET lan="Local Area Connection 2"
        GOTO :USERLOOP
    )
    IF %isDefault%==n GOTO :END
    GOTO :LOOP1 
)
Run Code Online (Sandbox Code Playgroud)

jam*_*lin 17

实际上,问题不在第一行.

问题是cmd它在解析IF语句时会立即进行变量替换,包括它的主体.因此行:

IF %isDefault%==y (
Run Code Online (Sandbox Code Playgroud)

是有问题的,因为isDefaultIF解析外部语句时未设置,因此它变为:

IF ==y (
Run Code Online (Sandbox Code Playgroud)

因此你会得到关于(意外的错误.您可以通过启用延迟环境变量扩展的命令扩展(SETLOCAL ENABLEDELAYEDEXPANSION)来解决此问题(有关详细信息,请参阅参考资料).您还可以重写脚本:set /?

@ECHO OFF
IF NOT "%1"=="" GOTO :EOF

:LOOP1
SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local Area Connection 2]?[y/n]
IF "%isDefault%"=="y" (
    SET from=1
    SET step=1
    SET to=10
    SET lan="Local Area Connection 2"
    GOTO :USERLOOP
)
IF "%isDefault%"=="n" GOTO :EOF
GOTO :LOOP1
Run Code Online (Sandbox Code Playgroud)

(我做了一些其他更改,例如使用内置:EOF标签而不是:END.)