БлогNot. Калькулятор выражений для командной строки Windows из 2 строк кода :)

Калькулятор выражений для командной строки Windows из 2 строк кода :)

Командные (пакетные) файлы имеют в Windows тип .bat и состоят из внутренних или внешних команд операционки, инструкций по вызову каких-либо программ плюс ряда специальных инструкций, предназначенных для организации условных и безусловных переходов или циклической обработки. Например, показанный ниже bat-файл умеет запускать Paint, Блокнот или стандартный Калькулятор в зависимости от выбора пользователя (имена программ взяты из Windows 7):

@echo off
chcp 1251
:start
cls
echo 1 - Первая программа
echo 2 - Вторая программа
echo 3 - Третья программа
echo 0 - Выход в OS
choice /c 1230 /n /m "Выбор?"
if errorlevel 4 goto end
if errorlevel 3 goto metka3
if errorlevel 2 goto metka2
start mspaint
goto start
:metka2
start notepad
goto start
:metka3
start calc
goto start
:end

Предполагается, что текстовый файл закодирован в кодировке Windows-1251, вызываемые программы располагаются в своём обычном месте, например, в папке c:\Windows\System32 и эта папка прописана в переменной окружения PATH, то есть, Windows найдёт исполняемый файл без указания полного пути к нему.

Выполнить готовый командный файл можно из любого файл-менеджера или прямо из командной строки. Во втором случае в меню Пуск выбираем команду "Выполнить" (если таковой нет, щёлкаем правой кнопкой мыши на кнопке "Пуск", выбираем Свойства, затем вкладку Меню "Пуск", жмём "Настроить" и в списке опций включаем галочку Команда "Выполнить"), в поле ввода пишем

cmd

, жмём Enter. В открывшемся окне консоли переходим в папку с командным файлом, например, если это папка c:\temp, а сам файл называется select.bat, то вводим вот что:

Переход в папку из командной строки Windows
Переход в папку из командной строки Windows

Немного материала по теме и примеры есть вот тут, на всякий случай также уточним, как можно создать пакетный файл.

Запустить стандартный Блокнот, набрать текст командного файла, выбрать меню Файл - Сохранить как, записать файл в нужную папку, например, как на картинке:

Сохранение bat-файла из Блокнота
Сохранение bat-файла из Блокнота

В списке "Тип файла" нужно выбрать "Все файлы", а после имени файла (в нашем случае на картинке это v12) не забыть дописать .bat

Кодировку файла оставляем Windows-1251 (ANSI).

Теперь к основной теме заметки. Написать чудо-калькулятор, почти что являющийся интерпретатором записанных на C++ формул, нам помогут две опции стандартной консольной команды set, цитируем справку:

Команда SET поддерживает два дополнительных ключа:

    SET /A выражение
    SET /P variable=[promptString]

Ключ /A указывает, что строка справа от знака равенства является числовым
выражением, значение которого вычисляется.  Обработчик выражений очень
прост и поддерживает следующие операции, перечисленные в порядке убывания
приоритета:

    ()                  - группировка
    ! ~ -               - унарные операторы
    * / %              - арифметические операторы
    + -                 - арифметические операторы
    << >>               - двоичный сдвиг
    &                   - двоичное И
    ^                   - двоичное исключающее ИЛИ
    |                   - двоичное ИЛИ
    = *= /= %= += -=    - присвоение
      &= ^= |= <<= >>=
    ,                   - разделитель операторов

Написав небольшую обёртку к вызову set с этими опциями, получим следующий командный файл:

@echo off
rem Настроили среду и выдали справку:
chcp 1251 >nul
title Калькулятор
color E1
cls
echo "Введите выражение или exit для выхода"
echo "()                  - группировка"
echo "! ~ -               - унарные операторы"
echo "* / %%               - арифметические операторы"
echo "+ -                 - арифметические операторы"
echo "<< >>               - двоичный сдвиг"
echo "&                   - двоичное И"
echo "^                   - двоичное исключающее ИЛИ"
echo "|                   - двоичное ИЛИ"
echo "= *= /= %= += -=    - присваивание"
echo ",                   - разделитель операторов"
:next
set /p exp=
if "%exp%"=="exit" goto exit
set /a result = "%exp%"
echo %result%
goto next
:exit
rem Перед выходом вернули настройки среды
color 07

Далее на скрине показан калькулятор в работе, результат (12+2)/3 == 4 - это правильно, потому что на C/C++ деление целых значений даёт целое, а остаток отбрасывается. Узнать больше Вы можете, выполнив из консоли

set /?

там даже циклы и ветвления можно писать :)

Калькулятор в работе
Калькулятор в работе

22.10.2019, 09:21 [3868 просмотров]


теги: программирование windows числа bat

показать комментарии (1)