Арифметические выражения (SET/а)
Выражение быть оценены может включать в себя следующие операторы:
+ Add set /a "_num=_num+5"
+= Add variable set /a "_num+=5"
- Subtract (or unary)set /a "_num=_num-5"
-= Subtract variable set /a "_num-=5"
* Multiply set /a "_num=_num*5"
*= Multiply variable set /a "_num*=5"
/ Divide set /a "_num=_num/5"
/= Divide variable set /a "_num/=5"
% Modulus set /a "_num=5%%2"
%%= Modulus set /a "_num%%=5"
! Logical negation 0 (FALSE) ⇨ 1 (TRUE) and any non-zero value (TRUE) ⇨ 0 (FALSE)
~ One's complement (bitwise negation)
& AND set /a "_num=5&3" 0101 AND 0011 = 0001 (decimal 1)
&= AND variable set /a "_num&=3"
| OR set /a "_num=5|3" 0101 OR 0011 = 0111 (decimal 7)
|= OR variable set /a "_num|=3"
^ XOR set /a "_num=5^3" 0101 XOR 0011 = 0110 (decimal 6)
^= XOR variable set /a "_num=^3"
<< Left Shift. (sign bit ⇨ 0)
>> Right Shift. (Fills in the sign bit such that a negative number always remains negative.)
Neither ShiftRight nor ShiftLeft will detect overflow.
<<= Left Shift variable set /a _num<<=2
>>= Right Shift variable set /a _num>>=2
() Parenthesis group expressions set /a "_num=(2+3)*5"
, Commas separate expressions set /a "_num=2,_result=_num*5"
...
Арифметические выражения (SET/A)
Размещение выражения в «кавычках» не является обязательным для простой арифметики, но необходимой для любого выражения с использованием логических операторов.
Любой расчет SET/A, который возвращает дробный результат, будет округленным до ближайшего целого целого.
Примеры:
SET /A "_result=2+4" (=6)
SET /A "_result=5" (=5)
SET /A "_result+=5" (=10)
SET /A "_result=2<<3" (=16) { 2 Lsh 3 = binary 10 Lsh 3 = binary 10000 = decimal 16 }
SET /A "_result=5%%2" (=1) { 5/2 = 2 + 2 remainder 1 = 1 }
В пакетном сценарии, оператор модуль (%) должны быть удвоен до (%%).
SET/A будет обрабатывать любую строку символов в выражении как имя переменной среды . Это позволяет выполнить арифметику с переменными окружения , не набирая никаких знаков%, чтобы получить значения .
SET /A _result=5 + _MyVar
Множественные расчеты могут быть выполнены в одной строке, разделяя каждый расчет с запятой, например:
_year=1999 Set /a _century=_year/100, _next=_century+1
Числа все должны быть в пределах от 32 разрядного целого числа числа (-2,147,483,648 до 2,147,483,647) для обработки более крупных номеров используется PowerShell или VBScript. Leading Zero будет указывать Octal
Числовые значения - это десятичные числа, если только префикс 0x для шестнадцатеричных чисел, 0 для восьмеричных чисел.
Так 0х10 = 020 = 16 десятичное
восьмеричное обозначения могут сбивать с толку - все числовые значения, которые начинаются с нулями, рассматриваются как восьмеричные, но 08 и 09 не являются действительными восьмеричное цифры. Например, SET/a _month = 07 вернет значение 7, но SET /a _month = 09 вернет ошибку.
Попробуйте запустить 'set /?' В командной строке. set/a означает использование арифметики - ожидает, что все справа от знака равенства будет числовым. Таким образом, параметр командной строки% 3 должен быть номером для этого уравнения для работы –
@ScottC благодарит за ваше четкое объяснение ... есть ли онлайн-ссылка, доступная для ознакомления с командами, начинающимися с '/'. Если да, вы можете мне предоставить. Благодарю. вы можете ответить на вопрос, я его принимаю. – Siva