Синтаксис bat: Практические приемы программирования в bat-файлах | windows

DevSimple ∷ BAT — улучшенный CAT с подсветкой синтаксиса

В UNIX подобных системах cat используется для последовательного считывания и вывода содержимого файлов в стандартный вывод.
В этой статье мы разберем похожую утилиту, являющуюся клоном cat, но с дополнительными улчшениями, такими как подсветка синтаксиса и интеграция с GIT.

Установка

Ubuntu

Скачайте последнюю версию .deb пакета отсюда и выполните команду:

# замените имя пакета, на скаченный вами
sudo dpkg -i bat_0.9.0_amd64.deb

MacOS

Установите bat с помощью пакетного менеджера Homebrew:

brew install bat

Arch Linux

Установите пакет bat из официального репозитория:

pacman -S bat

Другие системы

Если в списке выше вы не нашли своей операционной системы, то загляните в репозитрий.

Использование

Чтобы посмотреть содержимое файла, нужно выполнить команду:

bat file01.md

Вы также можете посмотреть содержимое сразу нескольких файлов:

bat file01.md file02.md

Или соединить несколько файлов в один:

bat file01.md file02.md > multifile.md

Перейдем к основным преимуществам bat.

Интеграция с Git

Если внести изменения в файл, который находится под контролем системы управления версиями Git, то в колонке слева будут отображаться изменения.

Подсветка синтаксиса

bat поддерживает подсветку синтаксиса для большого кол-ва языков разметки и программирования.

bat posts_controller.rb

С полным списком можно познакомиться, написав команду:

bat --list-languages

Конфигурация

Если вам не нравится тема по умолчанию, вы можете её поменять. Для того чтобы посмотреть список всех доступных команд запустите команду:

bat --list-themes

Для использования темы, для примера возьмем Monokai Extended Origin, запустите:

bat --theme="Monokai Extended Origin" posts_controller.rb

Для того, чтобы изменить тему по умолчанию, можно присвоить переменной окружения BAT_THEME понравившуюся тему:

export BAT_THEME="TwoDark"

Добавление новой темы

Первое, что нужно сделать, это создать папку, где мы будем хранить новые темы:

mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"

Теперь ищем тему с расширением *.tmTheme, например по этой ссылке, скачиваем, копируем в только что созданную папку и обновляем кэш:

# Перемещаем скачанную тему Railscasts.tmTheme
mv ~/Downloads/Railscasts.tmTheme .
# Обновляем кэш
bat cache --build

После этого новая тему будет доступна для выбора.

Файл конфигурации

Есть еще один вариант изменения настроек по умолчанию, использовать файл настроек. Для этого нужно создать файл bat.conf и через переменную окружения
BAT_CONFIG_PATH указать путь к этому файлу:

export BAT_CONFIG_PATH="/path/to/bat.conf"

Пример такого файла:

# Установить тему по умолчанию "TwoDark"
--theme="TwoDark"
# Показать номера строк, изменения Git и отобразить имя файла
--style="numbers,changes,header"

На этом все. Надеюсь, что этот пост был вам полезен.

::: Советы Бывалого :::

Не знаю как вы, а я всегда любил автоматизацию. Приятно видеть как все шуршит, крутится и вертится по одному нажатию клавиши :-). Автоматизировать можно много чего, но сейчас мы будем автоматизировать отправку почтовых сообщений.

Эту операцию можно делать разными способами.

1. Если ты немного соображаешь в программировании, то тебе легко написать небольшую программу, которая будет слать письма. Можно сделать ее универсальной, и наворотить кучу всякого… Но зачем ходить по чужим следам? Еще вступишь куда-нибудь :-).

2. Использовать команду mailto. Набери в окне «Выполнить/Run»:


mailto:[email protected]?Subject=»Здарова!»

или


mailto:[email protected]?Body=»Здарова!»

Здесь:

mailto:[email protected] — E-mail адрес получателя

?Subject=»Здарова!» — тема сообщения.

?Body=»Здарова!» — тело сообщения

Если у тебя установлен MAPI-клиент (например M$ Outlook Express), то в нем создастся сообщение для [email protected] с темой «Здарова». К сожалению синтаксис команды mailto сильно урезан от возможностей библиотеки mapi.dll и скажем к письму нельзя прикрепить аттачмент. (Цэ бэд!)

3. Использовать возможности сторонних программ. Outlook Express не позволяет работать с командной строкой, да и вообще у него куча недостатков. Поэтому мы будем использовать The Bat! — на мой взгляд, самый лучших почтовый клиент в мире. Достоинств у этой программы не счесть и я еще вернусь к ней в своих статьях по софту, но сейчас мы рассмотрим возможность создания программой почтовых сообщений из командной строки.

Для начала, весьма полезно было бы добавить путь к программе The Bat! в переменную PATH файла autoexec.bat. Это позволит сэкономить длину набираемой строки, что очень важно для таких программ как FoxPro, где лимит коммандной строки ограничивался 128 символами.

Сразу договоримся, что полный путь к программе The Bat! я указывать не буду (он у каждого свой), а буду лишь писать имя exe — файла (thebat.exe).

Теперь расмотрим общий синткасис создания сообщений в командной строке:


  • Итак, первая опция командной строки /NOLOGO
  • Синтаксис: «thebat.exe /NOLOGO»

    Эта опция отключает заставку на запуске программы. Открой свойства ярлыка The Bat’a на Рабочем Столе. Перейди на закладку «Ярлык/ShortCut» и в поле «Путь/Target» добавить к строке «Путь» слово /NOLOGO. Теперь ты грузишь Бат без заставки.


  • Опция №2 — /CHECK (/CHECKALL). Проверяет почтовые ящики на наличие новых сообщений.
  • Синтаксис: /CHECK[;Ящик №2[;Ящик №3[…]]]

    /CHECKALL — проверяет все ящики.

    Можно добавить эту опцию в тот же ярлык, что программа проверяла все или определенные ящики при запуске.

    Примеры:

    /CHECK»Мой первый ящик»;»Мой второй ящик» — проверит почту в ящиках «Мой первый ящик» и «Мой второй ящик»

    /CHECK*.ru — проверит почту в ящиках, заканчивающихся на «.ru»

    /CHECKwww* — проверит почту в ящиках, начинающихся c «www»

    /CHECK*sex* — проверит почту в ящиках, содержащих в названии «sex».


  • Опция №3 /SEND. Полный аналог /CHECK с точностью до наоборот. Отправляет почту с ящиков.
  • Синтаксис: /SEND[;Ящик №2[;Ящик №3[…]]]

    Подробнее останавливаться не буду, аналогия слишком очевидна.


  • Опция №4 — самая важная для нас, т. к. автоматически создает мыльные мессаги- /MAIL
  • Синтаксис: /MAIL[параметр1[;параметр2[;параметр3[…]]]

    В командной строке параметры разделяются точкой с запятой.

    Параметры:

    USER=значение или U=значение — имя аккаунта, с которого будет оправляться письмо

    PASSWORD=значение или P=значение — пароль на аккаунт(обычно нет)

    FOLDER=значение или F=значение — указывается путь к директории, где находятся настройки аккаунта. Если ничего не находит — берет аккаунт по умолчанию.

    TEMPLATE=значение или T=значение — указывает путь к файлу, в котором находится шабон письма. Если не использовать этот параметр, берется шаблон нового письма из шаблона текущего аккаунта.

    TO=значение — адрес того,кому, собственно шлешь письмо. Дополнительные адреса можно добавить, используя макросы шаблона %TO,%CC,%BCC.

    SUBJECT=значение или S=значение — тема сообщения. Можно использовать макрос %SUBJECT

    TEXT=значение или CONTENTS=значение или С=значение — параметр указывает путь к файлу, в котором содержится текст письма. Можно использовать макрос %PUT.

    ATTACH=значение или FILE=значение или A=значение — параметр указывает путь к файлу,который вы желаете приаттачить к письму. Можно использовать макрос %ATTACHFILE.

    SEND — отправка письма немедленно.

    QUEUE — помещает созданное письмо в папку «Outbox».

    Пример:

    thebat.exe /MAILU=Apple;[email protected];S=»Я читаю статью о Бате»;TEXT=C:\test.txt;A=C:\coolgirl.jpg;QUEUE — создали письмо с аккаунта Apple на адрес [email protected] с темой: ‘Я читаю статью о Бате’, текстом письма, взятом из файла C:\test.txt, с вложенным в письмо графическим файлом C:\coolgirl.jpg, поместили письмо в папку Outbox.

    Выполни эту команду из меню «Выполнить/Run» и у тебя создастся новое сообщение в Бате.

    Теперь мы знаем как легко и просто создавать письма из командной строки. Можно написать BAT-файл, в котором, к примеру, нужные тебе файлы копируются архивируюся и вкладываются в письма с готовым адресатом, темой, телом письма.

  • Но есть еще одна опция…
  • Эта опция /BATCH

    Синтаксис:

    Запускай The Bat! с опцией /BATCH и программа будет последовательно исполнять команды из указанного файла.

    Пример:

    thebat.exe /BATCH:C:\test.bat

    Содержимое файла test.bat может быть примерно следующим:

    /CHECKApple — проверить ящик Apple на наличие новых писем

    /SENDApple — отправить письма с ящика Apple

    Это основные опции командной строки программы The Bat!, которые, я надеюсь, помогут тебе немного разгрузить рутинную работу.

    Автоматизация форэва!

    Автор: Alex Apple

    Конвейер: узлы и процессы

    bat : пакетный сценарий Windows

    • сценарий: строка

      Выполняет пакетный скрипт. Допускается несколько строк. При использовании флага returnStdout вы, вероятно, захотите добавить к нему префикс @ , чтобы сама команда не была включена в вывод.

    • Кодировка

    • : строка (необязательно)

      Кодирование вывода процесса. В случае returnStdout применяется к возвращаемому значению этого шага; в противном случае или всегда для стандартной ошибки управляет копированием текста в журнал сборки. Если не указано, использует системную кодировку по умолчанию для узла, на котором выполняется шаг. Если предполагается, что выходные данные процесса могут содержать символы, отличные от ASCII, лучше явно указать кодировку. Например, если у вас есть конкретные сведения о том, что данный процесс будет создавать UTF-8, но будет работать на узле с другой системной кодировкой (обычно Windows, поскольку каждый дистрибутив Linux по умолчанию использует UTF-8 в течение длительного времени). ), вы можете обеспечить правильный вывод, указав: 9Кодировка 0003: «UTF-8»

    • метка : строка (необязательно)

      Метка, которая будет отображаться в представлении шага конвейера и сведениях о голубом океане для шага вместо типа шага. Таким образом, представление является более содержательным и специфичным для предметной области, а не техническим.

    • returnStatus: логическое значение (необязательно)

      Обычно сценарий, который завершается с ненулевым кодом состояния, приводит к сбою шага с исключением. Если этот параметр отмечен, возвращаемое значение шага вместо этого будет кодом состояния. Затем вы можете сравнить его, например, с нулем.

    • returnStdout : логическое значение (необязательно)

      Если флажок установлен, стандартный вывод задачи возвращается как значение шага в виде String , а не печатается в журнале сборки. (Стандартная ошибка, если таковая имеется, все равно будет напечатана в журнале.) Вам часто потребуется вызвать .trim() для результата, чтобы убрать завершающую новую строку.

    node : Allocate node

    Выделяет исполнитель на узле (обычно агент сборки) и запускает дальнейший код в контексте рабочей области на этом агенте.

    powershell : сценарий Windows PowerShell

    • сценарий: строка

      Выполняет сценарий Windows PowerShell (версия 3 или более поздняя). Допускается несколько строк.
      Примечание: помните о различиях между Windows PowerShell и PowerShell Core, проверьте, какая из них доступна на ваших агентах.

    • Кодировка

    • : строка (необязательно)

      Кодирование вывода процесса. В случае returnStdout применяется к возвращаемому значению этого шага; в противном случае или всегда для стандартной ошибки управляет копированием текста в журнал сборки. Если не указано, использует системную кодировку по умолчанию для узла, на котором выполняется шаг. Если предполагается, что выходные данные процесса могут содержать символы, отличные от ASCII, лучше явно указать кодировку. Например, если у вас есть конкретные сведения о том, что данный процесс будет создавать UTF-8, но будет работать на узле с другой системной кодировкой (обычно Windows, поскольку каждый дистрибутив Linux по умолчанию использует UTF-8 в течение длительного времени). ), вы можете обеспечить правильный вывод, указав: 9Кодировка 0003: «UTF-8»

    • метка : строка (необязательно)

      Метка, которая будет отображаться в представлении шага конвейера и сведениях о голубом океане для шага вместо типа шага. Таким образом, представление является более содержательным и специфичным для предметной области, а не техническим.

    • returnStatus: логическое значение (необязательно)

      Обычно сценарий, который завершается с ненулевым кодом состояния, приводит к сбою шага с исключением. Если этот параметр отмечен, возвращаемое значение шага вместо этого будет кодом состояния. Затем вы можете сравнить его, например, с нулем.

    • returnStdout : логическое значение (необязательно)

      Если флажок установлен, стандартный вывод задачи возвращается как значение шага в виде String , а не печатается в журнале сборки. (Стандартная ошибка, если таковая имеется, все равно будет напечатана в журнале. ) Вам часто потребуется вызвать .trim() для результата, чтобы убрать завершающую новую строку.

    pwsh : основной сценарий PowerShell

    • сценарий : строка

      Выполняет сценарий PowerShell. Допускается несколько строк. Этот плагин поддерживает PowerShell Core 6+.
      Примечание: помните о различиях между Windows PowerShell и PowerShell Core, проверьте, какая из них доступна на ваших агентах.

    • Кодировка

    • : строка (необязательно)

      Кодирование вывода процесса. В случае returnStdout применяется к возвращаемому значению этого шага; в противном случае или всегда для стандартной ошибки управляет копированием текста в журнал сборки. Если не указано, использует системную кодировку по умолчанию для узла, на котором выполняется шаг. Если предполагается, что выходные данные процесса могут содержать символы, отличные от ASCII, лучше явно указать кодировку. Например, если у вас есть конкретные сведения о том, что данный процесс будет создавать UTF-8, но будет работать на узле с другой системной кодировкой (обычно Windows, поскольку каждый дистрибутив Linux по умолчанию использует UTF-8 в течение длительного времени). ), вы можете обеспечить правильный вывод, указав: 9Кодировка 0003: «UTF-8»

    • метка : строка (необязательно)

      Метка, которая будет отображаться в представлении шага конвейера и сведениях о голубом океане для шага вместо типа шага. Таким образом, представление является более содержательным и специфичным для предметной области, а не техническим.

    • returnStatus: логическое значение (необязательно)

      Обычно сценарий, который завершается с ненулевым кодом состояния, приводит к сбою шага с исключением. Если этот параметр отмечен, возвращаемое значение шага вместо этого будет кодом состояния. Затем вы можете сравнить его, например, с нулем.

    • returnStdout : логическое значение (необязательно)

      Если флажок установлен, стандартный вывод задачи возвращается как значение шага в виде String , а не печатается в журнале сборки. (Стандартная ошибка, если таковая имеется, все равно будет напечатана в журнале.) Вам часто потребуется вызвать .trim() для результата, чтобы убрать завершающую новую строку.

    sh : сценарий оболочки

    • сценарий : строка

      Запускает сценарий оболочки Bourne, обычно на узле Unix. Допускается несколько строк.

      Можно использовать селектор интерпретатора, например: #!/usr/bin/perl

      В противном случае будет запущена системная оболочка по умолчанию с использованием флагов -xe (вы можете указать set +e и /или установите +x , чтобы отключить их).

    • Кодировка

    • : строка (необязательно)

      Кодирование вывода процесса. В случае returnStdout применяется к возвращаемому значению этого шага; в противном случае или всегда для стандартной ошибки управляет копированием текста в журнал сборки. Если не указано, использует системную кодировку по умолчанию для узла, на котором выполняется шаг. Если предполагается, что выходные данные процесса могут содержать символы, отличные от ASCII, лучше явно указать кодировку. Например, если у вас есть конкретные сведения о том, что данный процесс будет создавать UTF-8, но будет работать на узле с другой системной кодировкой (обычно Windows, поскольку каждый дистрибутив Linux по умолчанию использует UTF-8 в течение длительного времени). ), вы можете обеспечить правильный вывод, указав: 9Кодировка 0003: «UTF-8»

    • метка : строка (необязательно)

      Метка, которая будет отображаться в представлении шага конвейера и сведениях о голубом океане для шага вместо типа шага. Таким образом, представление является более содержательным и специфичным для предметной области, а не техническим.

    • returnStatus: логическое значение (необязательно)

      Обычно сценарий, который завершается с ненулевым кодом состояния, приводит к сбою шага с исключением. Если этот параметр отмечен, возвращаемое значение шага вместо этого будет кодом состояния. Затем вы можете сравнить его, например, с нулем.

    • returnStdout : логическое значение (необязательно)

      Если флажок установлен, стандартный вывод задачи возвращается как значение шага в виде String , а не печатается в журнале сборки. (Стандартная ошибка, если таковая имеется, все равно будет напечатана в журнале.) Вам часто потребуется вызвать .trim() для результата, чтобы убрать завершающую новую строку.

    ws : выделить рабочее пространство

    Выделяет рабочее место. Обратите внимание, что рабочее пространство автоматически выделяется для вас с помощью узел шаг.

    • каталог: Строка

      Рабочее пространство автоматически выделяется вам с помощью шага node , или вы можете получить альтернативное рабочее пространство с помощью этого шага ws , но по умолчанию расположение выбирается автоматически. (Что-то вроде AGENT_ROOT/workspace/JOB_NAME@2 .)

      Вместо этого вы можете указать здесь путь, и вместо этого эта рабочая область будет заблокирована. (Путь может быть относительным к корню агента сборки или абсолютным.)

      Если параллельные сборки запрашивают одно и то же рабочее пространство, вместо него может быть заблокирован каталог с суффиксом, например @2 . В настоящее время нет возможности ждать, чтобы заблокировать именно запрошенный каталог; если вам нужно принудительно применить это поведение, вы можете либо потерпеть неудачу ( error ), когда pwd указывает, что вы получили другой каталог, либо вы можете принудительно выполнить последовательное выполнение этой части сборки другими способами, такими как имя стадии : '…', параллелизм: 1 .

      Если вам не нужна блокировка, просто используйте шаг dir , чтобы изменить текущий каталог.

    Символы процентов — % — Windows CMD

    Символы процентов — % — Windows CMD — SS64. com

    • SS64
    • СМД
    • Практическое руководство

    Обычный вопрос, который задают начинающие программисты пакетных файлов: « зачем нам удваивать символы процента при написании команды FOR? ». В командной строке %A работает нормально, так зачем пакету нужен %%A?

    Чтобы ответить на этот вопрос, нам нужно рассмотреть все вещи в пакетном языке, которые используют символ %:

    • Первые параметры командной строки %0 %1 %2 %3 …
    • Следующая команда FOR, хотя большинство людей разумно выбирают буквы параметров, такие как %A или %F или %Z, вполне возможно выбрать числа %1 %2 %3 …

      Попробуйте это в командной строке:

      FOR /L %6 in (1,1,5) Do Echo %6

      Это сработает и даст вам хороший список чисел от 1 до 5.

    Теперь вы видите проблему, которую это представляет: у вас может быть два разных типа переменных с одинаковыми именами, и синтаксическому анализатору командной оболочки CMD нужен способ их разделения.

    Как синтаксический анализатор командной строки оболочки CMD оценивает переменные:

    Оболочка CMD считывает каждую строку пакетного файла один раз слева направо, когда находит знак процента, проверяет следующий символ и действует следующим образом:

    • Если следующим символом является еще один знак процента (%), CMD заменяет два символа одним знаком процента, а затем считывает третий символ, оценивая его либо как параметр FOR, либо, если не в цикле FOR, просто обрабатывая его как обычный персонаж ‘%’.
      %%G =>
      какое-то значение
      %%Привет => %Привет
    • Если следующим символом является цифра (0-9), CMD заменяет знак процента и цифру значением соответствующего параметра командной строки. Кроме того, если символ представляет собой тильду (~), то будут применены расширения параметров.
      %1 => какое-то значение
    • Если следующий символ является чем-то еще (то есть не числом или символом %), CMD обрабатывает все до следующего знака процента как имя переменной и заменяет его значением этой переменной.
      %_somevariable% => какое-то значение

    При работе в командной строке (а не в пакетном сценарии) невозможно использовать какие-либо параметры пакетного файла %1, %2 и т. д., поэтому описанная выше логика не выполняется, и, следовательно, для параметров FOR в командной строке требуется только один % .

    Еще одно место, где используется символ процента, — это оператор модуля в команде SET /A, в пакетном файле он всегда должен передаваться как пара двойных %%.

    Имена переменных

    Стоит также рассмотреть, как это повлияет на обычные переменные — это не делает код читаемым, но просто для доказательства давайте попробуем создать стандартную переменную с числовым именем:

    SET 1=Hello

    Можно было ожидать, что будет создана переменная %1%, но в пакетном файле это не удастся.

    Даже если сценарий был вызван без передачи какого-либо параметра %1, параметры имеют приоритет, поэтому %1% оценивается как %1 плюс дополнительный % в конце.
    Помните, что командная строка анализируется слева направо только один раз, поэтому %1 оценивается еще до того, как будет прочитан второй %.

    Вы, конечно, можете сделать SET 1=Hello в командной строке, и это сработает!

    Резюме

    Итак, что мы узнали из всего этого:

    • Никогда не пытайтесь начинать имя переменной с числа, обычной практикой является префикс всех переменных с _underscore, если вы сделаете это привычкой, вас никогда не укусит проблема с недопустимым числовым именем.
    • Не используйте числа в качестве переменных параметров FOR, это может сработать, но будет путать людей (и недокументировано).
    • Если вы хотите использовать простой символ % в любом месте в пакетном файле, вам нужно удвоить %

      Эхо «Это включает скидку 50%%»
      > Сюда входит скидка 50%

      Сюда входят ссылки на имена файлов, % является допустимым символом для имени файла, но для доступа к нему из пакетного файла необходимо удвоить его:

      Запустить «C:\my work\Demo %%расч.