2013-04-03 2 views
0

У меня возникают трудности с сопоставлениями чисел, например <,> и == в моем пакетном коде. Что Im делает генерирует случайное число и используя этот ответ что-то сделать, это то, что я написал:Сравнение номеров в пакетном коде

set rand=%random% 
set rand=%rand:~1,1% 
If %rand%==9 goto nine 
If %rand%>5 goto above 5 
If %rand%>1 goto above 1 
If %rand%==0 goto zero 

И код просто закрывается, когда я запускаю его. Я попытался помещать пространство между двумя сравниваемыми объектами и неравенством, но он все еще не работает.

Помните, что это пакетный код в Windows.

+0

'<>' не работает в пакетном режиме, см. 'If /?' В командной строке. – Endoro

+0

Помните, что вы обычно хотите использовать кавычки на них тоже, например 'if '10" gtr "5" goto above5' –

ответ

1

чтения HELP IF, а затем попробовать этот

if %rand% equ 9 goto nine 
if %rand% gtr 5 goto above5 
goto below5 

внимание, что имена меток не может содержать пробелов

в качестве дополнительного бонуса, прочитать HELP SET и изменить способ попытаться получить случайное 0 до 9 числа в

set /a rand=%random% %% 10 
+1

О, конечно! прочитайте 'HELP SET'. Очень хороший совет. Здесь есть пара ловушек. Неясно, используется ли 'set rand =% rand: ~ 1,1%' для получения символа 'FIRST' строки. Фактически он получит 'SECOND', поскольку для подстановки используется подстановка ZERO для начальной позиции. ОДНАКО получение символа «ПЕРВЫЙ» приведет к резкому перекосу. Число-STRING, возвращаемое '% random%', равно '0'..'32767'. Это означает, что есть только результат «ONE», который начинает «0» из 32768 комбинаций, но есть 11111, которые запускают «1» и 11,111, которые начинаются «2». – Magoo

+0

Если 'set rand =% rand: ~ 1,1%' был специально выбран для получения символа 'SECOND', что приведет к более равномерному распределению, то для'% RANDOM% '= 0..9 (всего 10 результаты 32768), тогда для параметра «RAND» будет установлено значение [nothing], и это приведет к хаосу с помощью оператора 'IF', поскольку первая строка сравнения будет пустой, что приведет к нарушению синтаксиса. В то время как метод 'set/a ...' будет * работать *, было бы проще использовать 'set rand =% rand: ~ -1%', который возвращает символ 'LAST'' rand' и составляет ТОЧНО тот же вещь. ИЛИ 'set/a rand =% random: ~ -1%', который сохраняет шаг и еще проще. – Magoo

+0

Правильно, я был в сомнении предложить либо '% rand: ~ -1%', либо '% random% %% 10', потому что для текущей ситуации он не делает различий. Но '% random% %% 10' является более гибким. Вы можете изменить 10 для другого номера, чтобы иметь другой диапазон (например, используйте 6 для нескважинных кубиков) –

0

для команд, которые используют эти ключи вместо равных и больше символа;

EQU - equal 
NEQ - not equal 
LSS - less than 
LEQ - less than or equal 
GTR - greater than 
GEQ - greater than or equal 

Для Equ tho я бы предложил использовать == вместо equ. легче набирать.

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