2017-10-05 52 views
-1

我做了什么错误或为什么这不起作用?我对批处理很新颖。它说“命令的语法不正确。”如预期批量如果变量小于变量不起作用

if %nm1% lss %nm2% (
    echo voitit:%voitat% 
    set /p "tupla=Voitonmaksu.1 tuplaus.2 (1/2)." 
) 
if %nm1%==%nm2% (
    set /a voitat=%voitat%/2 
    echo voitit:%voitat% 
    set /a voitot=%voitot% + %voitat% 
    pause 
    goto peli 
) 
if %nm2% lss %nm1%(
    echo voitit:0 
    pause 
    goto peli 
) 
if %tupla%==1 (
    set /a voitot=%voitot% + %voitat% 
    pause 
    goto peli 
) 
if %tupla%==2 goto tuplaus 
+0

我会建议,而不是'set/a voitat =%voitat%/ 2'&'set/a voitot =%voitot%+%voitat%'您使用,'设置/分别为voitat/= 2'&'Set/A voitot + = voitat'。 – Compo

回答

3
set /a voitat=%voitat%/2 
set /a voitot=%voitot% + %voitat% 

这些命令将无法正常工作,因为delayedexpansion - 因为你正在使用set/a(很多很多所以在这文章使用search设施在最上面一栏)

- 语法允许将变量表达为“裸体” - 没有%分隔符时,当delayedexpansion怪癖变得无关紧要时(但无论如何您都应该阅读它 - 以避免不可避免的后续问题。)

if %nm2% lss %nm1%(

必须有%nm1%(

如果任一参数为非数字(可能不是,因为他们的名字),那么参数必须“援引”之间的空间(适用于任何if其中参数可能包含空格)

+0

我会考虑提及,报价也有助于空值的情况下... – aschipfl

+0

@aschipfl - 如果您想进行数字比较,则不能使用引号。对IF语句中的空(未定义)变量的最简单保护是使用延迟扩展。 – dbenham

+0

@dbenham,我同意;其实我只是指最后一个答案的句子...... – aschipfl