2017-10-05 48 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