批处理:if语句与字符串比较总是返回true

问题描述:

if "x%1" == "x" (
goto :l2 
) 
:l2 
echo doskey %1>>startup.cmd 

在条件和goto上试过有和没有括号,也没有用引号试过,当然也试着在同一行上 - 它总是返回true。批处理:if语句与字符串比较总是返回true

+0

你传递一个参数到您的批处理脚本? '%1'是传递给脚本的第一个参数的值;如果你没有通过论证,if语句将永远是真实的。你想用你的'if'语句完成什么? –

+0

是的,我传递了参数。 – UIlrvnd

+0

不,它不会 - 但是完全相同的代码执行无关的评估。 – wmz

你有一个非常愚蠢的错误:-)

如果条件为真,你GOTO标签。

如果条件为false,那么不要转到GOTO,而是转向下一行,这恰好就是您的标签。

同样的结果!

其他问题 -

1)我认为你的逻辑是相反的。我相信你只想要GOTO:l2如果定义了%1,则反过来。

2)"A&B"(包括引号)的%1值将失败。最好使用"%~1"而不是"%1"

3)比较中不需要x。

容易固定:

if "%~1" neq "" goto :l2 
exit /b 
:l2 
echo doskey %1>>startup.cmd 

你真的不需要转到:

if "%~1" neq "" echo doskey %1>>startup.cmd