我正在努力进行简单的检查,如果用户输入只是空(Enter),并且如果将变量设置为新值...花费一个小时但它不起作用。 目标是让输入的值以反斜杠开头,如果没有输入,则只是一个空字符串。
代码:
SET myTargetServerInstanceName=anyNOPEdummyValue
SET /P myTargetServerInstanceName=Enter Target Server INSTANCE Name:
IF %myTargetServerInstanceName%==anyNOPEdummyValue SET myTargetServerInstanceName=
IF NOT %myTargetServerInstanceName% == [] SET myTargetServerInstanceName=\%myTargetServerInstanceName%
导致错误:
此时SET意外。
答案 0 :(得分:8)
检查空变量的常用方法是比较其"%value%"
是否为""
。但是,为了使其正常工作,您必须在set /P
之前删除变量,因为如果用户只需按Enter键,则变量的先前值为而不是改性:
set "var="
set /P var=
if "%var%" equ "" set "var=default value"
但是,更简单的方法是使用if defined
:
set "var="
set /P var=
if not defined var set "var=default value"
以前的方法不需要延迟扩展。
作为前面描述的推论,您可以通过这种方式获得相同的结果:
set "var=default value"
set /P var=
答案 1 :(得分:2)
您可以检查set /p
操作是否成功
set /p "var=prompt text?" || set "var=default value"
如果您更喜欢set / if
,当您检查可以为空或包含空格的值时,最好使用引号
if "%var%"=="" set "var=default value"
或者,由于未定义没有内容的变量,您可以使用
检查此案例if not defined var set "var=default value"
答案 2 :(得分:0)
我建议在if
中附上<{1}}比较部分的两侧:
"
如果其中一个比较表达式(SET myTargetServerInstanceName=anyNOPEdummyValue
SET /P myTargetServerInstanceName=Enter Target Server INSTANCE Name:
IF "%myTargetServerInstanceName%"=="anyNOPEdummyValue" SET myTargetServerInstanceName=
IF NOT "%myTargetServerInstanceName%"=="" SET myTargetServerInstanceName=\%myTargetServerInstanceName%
的左侧或右侧)扩展为空字符串,则会收到语法错误。