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)
是有问题的,因为isDefault
在IF
解析外部语句时未设置,因此它变为:
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
.)