Форум программистов, компьютерный форум, киберфорум
nekit270
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Добро пожаловать, здесь я программирую бессмысленно и беспощадно

ExBAT - расширенная версия Batch

Запись от nekit270 размещена 17.09.2023 в 23:35
Показов 1793 Комментарии 6
Метки bat, batch, cmd, exbat, windows

Мне тут нечем заняться было, и я решил написать на C# расширение bat-языка, которое компилируется в обычный bat-файл.

1. Работа с компилятором

1.1. Компиляция
Code
1
exbat.exe --compile source.exb output.bat
1.2. Запуск (компиляция во временный файл, его запуск и последующее удаление)
Code
1
exbat.exe --run source.exb
2. Синтаксис ExBAT

2.1. Комментарии

В качестве символов начала комментария допустимы:
  • # (bash-style)
  • // (c-style)
  • :: и rem (из Batch)

Пример:
Windows Batch file
1
2
3
4
# Комментарий
// Тоже комментарий
:: Снова комментарий
rem Еще один комментарий (а я думал, сова)
2.2. Переменные

Переменные можно использовать с использованием $ (как в bash)

Пример:
Windows Batch file
1
2
3
4
set MYVAR=5
echo %MYVAR%
echo !MYVAR!
echo $MYVAR
2.3. Функции

В ExBAT можно определять функции и вызывать их.

Определение функции начинается с оператора
function имя_функции(аргументы, через, запятую)
и заканчивается оператором
end function

В коде функции можно использовать конструкцию $имя_аргумента вместо номера аргумента (%~номер_аргумента)

Вызвать функцию можно с помощью такой конструкции:
имя_функции(аргументы, через, запятую)

Для маркировки, что аргумент - имя переменной, куда функция записывает результат выполнения, можно использовать модификатор out (это никак не влияет на выполнение и создано для того, чтобы код выглядел понятнее):
pow(5, 2, out result)

Пример:
Windows Batch file
1
2
3
4
5
6
function foo(arg1, arg2)
    echo Первый аргумент: $arg1
    echo Второй аргумент: $arg2
end function
 
foo("Строка 1", "Строка 2")
2.4. Вычисление выражений

В ExBAT доступно inline-вычисление математических выражений с помощью оператора calc{выражение}.

Пример:
Windows Batch file
1
2
set /p "number=Введите число: "
echo $number * 2 = calc{$number * 2}
2.5. Оператор if

Оператор if был изменен, чтобы выглядеть более наглядно:

Windows Batch file
1
2
3
4
5
6
7
if(условие_1)
    команды_1
else if(условие_2)
    команды_2
else
    команды_3
end if
В условиях доступны операторы сравнения <, >, <= и >= (вместо lss, gtr, leq и geq)

Пример:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
set /p "number=Введите число: "
if($number < 5)
    echo Число меньше 5
else if($number < 10)
    echo Число меньше 10, но больше 5
else if($number < 20)
    echo Число меньше 20, но больше 10
else
    echo Число больше 20
end if
2.6. Подавление вывода

Для подавления вывода в ExBAT можно использовать следующие операторы:
  • noout(команда) - подавление вывода в stdout (аналогично команда > nul)
  • noerror(команда) - подавление вывода в stderr (аналогично команда 2> nul)
  • quiet(команда) - подавление всего вывода (аналогично команда > nul 2>nul)

2.7. Макроподстановки

Можно использовать макроподстановки с помощью оператора define(имя, значение).

Пример:
Windows Batch file
1
2
3
4
define(VERSION, 1.4)
 
# Выведет "1.4"
echo VERSION
2.8. Подключение библиотек

Оператор include(имя_библиотеки) позволяет подключать к ExBAT-скрипту библиотеки.
Пока их можно подключить только из [путь_к_компилятору]\lib, но планируется добавление возможности подключать их из любого места.

Пример:
Windows Batch file
1
2
3
4
5
# math - одна из библиотек, поставляемых вместе с компилятором
include(math)
 
pow(5, 2, out result)
echo $result
Про стандартные библиотеки статья (или даже несколько?) будет написана в ближайшее время, я оставлю здесь ссылку.

3. Ссылки на скачивание
P.S. Что думаете, у данного инструмента есть смысл и шанс выжить? Пишите в комментариях.
Метки bat, batch, cmd, exbat, windows
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 6
Комментарии
  1. Старый комментарий
    Аватар для AlexProgramm
    Вот это да! Новый язык!
    Запись от AlexProgramm размещена 18.09.2023 в 10:05 AlexProgramm вне форума
  2. Старый комментарий
    Аватар для AlexProgramm
    Мне тут нечем заняться было
    А когда есть, чем заняться, вы наверное операционные системы пишите?
    Запись от AlexProgramm размещена 18.09.2023 в 11:36 AlexProgramm вне форума
  3. Старый комментарий
    Аватар для nekit270
    Цитата Сообщение от AlexProgramm
    А когда есть, чем заняться, вы наверное операционные системы пишите?
    пробовал тыкать Cosmos, но как-то не пошло. А так я большую часть программ пишу от нечего делать, но некоторые оказываются полезными, а некоторые - нет
    Запись от nekit270 размещена 18.09.2023 в 12:19 nekit270 вне форума
  4. Старый комментарий
    Аватар для nekit270
    Цитата Сообщение от AlexProgramm
    Вот это да! Новый язык!
    не думаю, что это можно назвать новым языком. скорее просто расширение bat, и парочка библиотек. ничего из того, что нельзя сделать на batch, нельзя сделать и на exbat, это просто "синтаксический сахар"
    Запись от nekit270 размещена 18.09.2023 в 12:21 nekit270 вне форума
  5. Старый комментарий
    Аватар для AlexProgramm
    Ну надеюсь этот программный продукт попадет в число полезных!
    Запись от AlexProgramm размещена 18.09.2023 в 13:36 AlexProgramm вне форума
  6. Старый комментарий
    Аватар для nekit270
    Цитата Сообщение от AlexProgramm
    Ну надеюсь этот программный продукт попадет в число полезных!
    тоже надеюсь. вопрос в том, будет его кто-нибудь использовать или нет
    Запись от nekit270 размещена 18.09.2023 в 15:53 nekit270 вне форума
 
Новые блоги и статьи
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru