Статья Переменные в CMD, команда SET и арифметика
Выводит случайное число от 0 до 9. У меня это число по нелепой псевдослучайности цифру секунды %CD% - раскрывается в строку текущей директории. %DATE% - раскрывается в текущую дату, используя тот же формат команды DATE. %TIME% - раскрывается в текущую дату, используя формат команды TIME. %ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL. Уровень ошибки, 0 - это нет ошибки, 1 - это есть ошибка, а другие это номера ошибки.
Чтобы получить полный список переменных и их значений введите команду SET
Операции со строковыми или численными переменными
Соединение 2-ух строковых переменных
Вывод определенного(ых) символа(ов) из строки Символы номеруются начиная с 0!
Существуют 2 способа использовать переменную в переменной, например: вывод n-ого символа
Первый способ с call set
писать в do С циклами мы разберемся в следующей статье. Но, пока уточню: если код второго способа юзать в пакетном файле (BATнике), то вместо %i юзаем %%i.
Операции с числовыми переменными
Увеличивание на единицу
Унарные операторы
Логическое отрицание (Logical NOT)
Побитовое И (AND)
Побитовое И — это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Другими словами, если оба соответствующих бита операндов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0.
Побитовое ИЛИ (OR)
Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Другими словами, если оба соответствующих бита операндов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1.
Побитовое исключающее ИЛИ (XOR)
Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на
одинаковых позициях в двоичных представлениях операндов. Другими словами, если соответствующие биты операндов различны, то двоичный разряд результата равен 1; если же биты совпадают, то двоичный разряд результата равен 0.
К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему). При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.
Двоичный арифметический сдвиг
Арифметический сдвиг аналогичен логическому, но значение слова считается знаковым числом, представленным в дополнительном коде. Так, при правом сдвиге старший бит сохраняет свое значение. Левый арифметический сдвиг идентичен логическому.
Максимальный размер отдельной переменной среды составляет 8192 байта.(у меня выходило только 8184, наверное это вместе с названием. ) Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.
И я забыл, про 8-ричную и 16-ричную систему счисления в CMD
Системы счисления
Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18.
Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.
Восьмеричная система счисления
Dragokas Very kind Developer- 2 Ноя 2013
- #2
Ограничение - будет модифицирована переменная. Следует выбрать переменную, модификация которой не нарушит работу скрипта или использовать setlocal / endlocal.
Undocumented Dynamic variables (read only)
Dragokas Very kind Developer- 2 Ноя 2013
- #3
Полезные функции
Отличие от встроенного в CMD деления: исходное число (делимое) может превышать границу для числового типа данных CMD (актуально для Гигабайтов данных, представленных в виде байтов, для дальнейшего перевода в более удобо-читаемую единицу измерения).
Принцип работы: если подстрока присутствует в строке, она будет удалена и результат не будет равен исходной строке. Не работает с пустыми строками.
2. Вариант, когда подстрока тоже в переменной
Пример использования и функция:
Talory Новый пользователь- 20 Фев 2019
- #4
- 20 Фев 2019
- #5
Здравствуйте, @Talory ! Добро пожаловать на SafeZone.
О какой части статьи идёт речь?
Talory Новый пользователь- 20 Фев 2019
- #6
- 20 Фев 2019
- #7
Я не могу сказать, не увидев примера подобной записи. Существуют различные форматы и кодировать их придётся по-разному. Для изучения: https://safezone.cc/resources/registry-time-decoder.205/ И по этому поводу лучше создать отдельную тему.
В общем случае, перевод с 10-СС в 16 будет через Batch выглядеть так:
JAXSWAGGER Новый пользователь- 14 Май 2019
- #8
- 14 Май 2019
- #9
IF [/I] строка1 оператор_сравнения строка2 команда
EQL - равно NEQ - не равно LSS - меньше LEQ - меньше или равно GTR - больше GEQ - больше или равно,
JAXSWAGGER Новый пользователь- 14 Май 2019
- #10
- 15 Май 2019
- #11
Похоже, ошибка во встроенной документации.
Вместо EQL должно быть EQU /i - не нужна т.к. у вас сравнение математическое, а не текстовое Переменную нужно подавать в раскрытом виде:
Второй вариант с кавычками безопаснее, если сравниваете строки.
Переменную можно не раскрывать только в математических операциях при участии оператора set /a
m00slim25 Новый пользователь- 27 Апр 2020
- #12
Заметил несколько ошибок:
>> Логическое отрицание (Logical NOT)
m00slim25 Новый пользователь- 27 Апр 2020
- #13
- 27 Апр 2020
- #14
Спасибо за комментарии, дополнил.
m00slim25 Новый пользователь- 2 Май 2020
- #15
При использовании нетривиальных вычислений. Например, в случае переполнения при использовании операторов битового сдвига. Эти операторы просто не определяют переполнение, вследствие чего последующая побитовая инверсия даёт ошибочный результат.
ЗЫ. Только не просите примеры, они где то далеко и глубоко закопаны Да Вы и сами можете исследовать эту особенность, это несложно ЗЫЫ. Любой, кто использует вычисления подобного рода в командной оболочке, способен самостоятельно расследовать подобные инциденты, выявить причину ошибочных результатов, и принять меры, чтобы избежать этих инцидентов. Я привёл тот комментарий лишь для информативности: знание - сила. Можете игнорировать его, если он Вас каким-либо образом напрягает.