2015-10-18 5 views
1
C:\WINDOWS\system32>SetLocal EnableDelayedExpansion 
C:\WINDOWS\system32>set/a Number1=3+9 
12 
C:\WINDOWS\system32>if !Number1!==9+3 (echo Good) else (echo Bad) 
Bad 
C:\WINDOWS\system32>if !Number1!==3+9 (echo Good) else (echo Bad) 
Bad 
C:\WINDOWS\system32>set/a i=9+3 
12 
C:\WINDOWS\system32>if !Number1!==%i% (echo Good) else (echo Bad) 
Bad 

Я ожидал увидеть последние результаты (и, возможно, некоторые другие), чтобы показать Good как результат, но не сделал! Я думаю, это потому, что это ошибка с SetLocal EnableDelayedExpansion, но мне это нужно в моем коде. Итак, как мне получить ожидаемый результат с SetLocal EnableDelayedExpansion. Спасибо за любую предоставленную помощь =)Пакетные SETLOCAL EnableDelayedExpansion и математические проблемы

+1

Вы набираете все эти строки в командной строке ?? в этом случае 'setlocal EnableDelayedExpansion' не действует, и поэтому расширение' !! 'не будет работать; вам нужно открыть новый экземпляр 'cmd', чтобы включить замедленное расширение:' cmd/V: ON' – aschipfl

+0

Кроме того, вы должны использовать оператор сравнения 'EQU' для числовых операций, потому что' == 'force * string * сравнение .. – aschipfl

+0

Да, я набрал все команды в командной строке. И да, после того, как я попробовал это в пакетном файле, это сработало! Я также попробую использовать EQU. Спасибо :) :) :) – Gerrardio

ответ

2

setlocal EnableDelayedExpansion работает только в пакетных файлах (см. Также setlocal /?), это не имеет никакого эффекта при вводе в командной строке; поэтому расширение !! не работает.

Чтобы использовать замедленное расширение в командной строке, вам необходимо открыть новый cmd экземпляр:

cmd /V:ON 

Вы не можете сделать арифметику в сравнении выражениях if заявления непосредственно, что вам нужно сделать все расчеты заранее.
Кроме того, вы должны использовать оператор сравнения EQU для числовых операций, поскольку == силы строки сравнения:

set /A Number1=3+9 
set /A i=9+3 
if !Number1! EQU %i% (echo Good) else (echo Bad) 
+1

Что вы подразумеваете под "' == 'force string сравнения"? Числовое сравнение имеет смысл только при больших/меньших сравнениях. Если два значения равны/разные, не имеет значения, взяты ли они в виде чисел или строк! – Aacini

+0

Согласен, '==' и 'EQU' дают тот же результат; Я просто хотел указать, что они не ведут себя точно так же ... – aschipfl

+0

Извините. Если '==' и 'EQU' не ведут себя точно так же, какая разница? Можете ли вы опубликовать любой код, который показывает эту разницу? – Aacini

Смежные вопросы