Bat файл какой язык

Обновлено: 04.07.2024

A командного файла - это файл сценария в DOS , OS / 2 и Microsoft Windows . Он состоит из серии команд , которые должны выполняться интерпретатором командной строки , сохраненных в текстовом файле . Пакетный файл может содержать любую команду, которую интерпретатор принимает в интерактивном режиме, и использовать конструкции, которые разрешают условное ветвление и цикл внутри пакетного файла, такие как IF , FOR и GOTO метки. . Термин «пакетный» происходит от пакетная обработка , что означает «неинтерактивное выполнение», хотя пакетный файл может не обрабатывать пакет из нескольких данных.

Расширение имени файла .bat используется в DOS и Windows. Windows NT и OS / 2 также добавили .cmd . Пакетные файлы для других сред могут иметь другие расширения, например, .btm в оболочках, связанных с 4DOS , 4OS2 и 4NT .

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

Содержание

Варианты

В DOS командный файл можно запустить из интерфейс командной строки , введя его имя, затем любые требуемые параметры и нажав клавишу ↵ Enter . При загрузке DOS файл AUTOEXEC.BAT , если он присутствует, выполняется автоматически, поэтому в этот файл можно поместить любые команды, которые необходимо выполнить для настройки среды DOS. Пользователи компьютеров должны иметь файл AUTOEXEC.BAT для установки системной даты и времени, инициализации среды DOS, загрузки любых резидентных программ или драйверов устройств или инициализации сетевых подключений и назначений.

Ранняя версия Windows

OS / 2

Windows NT

Microsoft выпустила версию cmd.exe для Windows 9x и ME под названием WIN95CMD, чтобы пользователи старых версий Windows могли использовать определенные командные файлы в стиле cmd.exe.

Расширения имен файлов

Параметры пакетного файла

COMMAND.COM и cmd.exe поддерживают количество специальных переменных (от %0 , %1 до % 9 ) для ссылки на путь и имя пакетного задания и первые девять параметров вызова из пакетного задания, см. также SHIFT . Несуществующие параметры заменяются строкой нулевой длины. Их можно использовать аналогично переменным среды , но они не хранятся в среде. Microsoft и IBM называют эти переменные параметрами замены или заменяемыми параметрами, тогда как Digital Research, Novell и Caldera ввели для них термин "переменные замены". JP Software называет их параметрами пакетного файла.

Примеры

Этот пример пакетного файла отображает Hello World! , запрашивает и ожидает, пока пользователь нажмет клавишу, а затем завершает работу. . (Примечание: не имеет значения, вводятся ли команды в нижнем или верхнем регистре, если не работают с переменными)

Чтобы запустить файл, он должен быть сохранен с расширением .bat (или .cmd для операционных систем типа Windows NT) в текстовом формате, обычно создаваемом с помощью текстового редактора, такого как Microsoft Notepad или текстовый процессор , работающий в текстовом режиме.

При выполнении отображается следующее:

Объяснение

Интерпретатор выполняет каждую строку по очереди, начиная с первой. Символ @ в начале любой строки предотвращает отображение этой команды в подсказке при ее выполнении. Команда ECHO OFF отключает подсказку навсегда или до тех пор, пока она не будет включена снова. Комбинированный @ECHO OFF часто, как и здесь, является первой строкой командного файла, предотвращающей отображение любых команд, включая саму себя. Затем выполняется следующая строка, и команда ECHO Hello World! выводит Hello World! . Выполняется следующая строка, и команда PAUSE отображает Нажмите любую клавишу, чтобы продолжить. . . и приостанавливает выполнение скрипта. После нажатия клавиши сценарий завершается, так как команд больше нет. В Windows, если сценарий выполняется из уже запущенного окна командной строки , окно остается открытым в командной строке, как в MS-DOS; в противном случае окно закрывается по завершении.

Ограничения и исключения

Нулевые значения в переменных

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

Например, если% foo% пуст, этот оператор:

анализируется как ошибочная конструкция:

Аналогично, если % foo% содержит abc def , то возникает другая синтаксическая ошибка:

Обычный способ предотвращения эта проблема заключается в заключении расширений переменных в кавычки, чтобы пустая переменная расширялась до допустимого выражения IF "" == "bar" вместо недопустимого IF == bar . Текст, который сравнивается с переменной, также должен быть заключен в кавычки, потому что кавычки не являются специальным ограничивающим синтаксисом; эти персонажи представляют себя.

Задержка! VARIABLE! Расширение, доступное в Windows 2000 и более поздних версиях, может использоваться, чтобы избежать этих синтаксических ошибок. В этом случае пустые или многословные переменные не ошибаются синтаксически, потому что значение расширяется после анализа команды IF:

Еще одно отличие в Windows 2000 или выше заключается в том, что пустая переменная (неопределенная) не заменяется. Как описано в предыдущих примерах, предыдущее поведение пакетного интерпретатора привело бы к пустой строке. Пример:

Пакетные интерпретаторы до Windows 2000 отображали результат MyVar не определен .

Кавычки и пробелы в переданных строках

В отличие от процессов Unix / POSIX, которые получают свои аргументы командной строки, уже разделенные оболочкой на массив строк, процесс Windows получает всю командную строку как одну строку через функцию API GetCommandLine . В результате каждое приложение Windows может реализовать свой собственный синтаксический анализатор для разделения всей командной строки на аргументы. Многие приложения и инструменты командной строки разработали для этого собственный синтаксис, поэтому не существует единого соглашения о заключении в кавычки или экранировании метасимволов в командной строке Windows.

  • Для некоторых команд пробелы рассматриваются как разделители, разделяющие аргументы, если эти пробелы не заключены в кавычки. Существуют различные соглашения о том, как кавычки могут быть переданы приложению:
    • Широко используемое соглашение реализуется с помощью синтаксического анализатора командной строки, встроенного в библиотеку времени выполнения Microsoft Visual C ++ в CommandLineToArgvW . Он использует соглашение, согласно которому 2 n обратной косой черты, за которыми следует кавычка ("), создают n обратную косую черту, за которой следует начало / конец кавычки, тогда как (2 n ) Обратная косая черта +1, за которой следует кавычка, снова создает n обратных косых черт, за которыми следует литерал кавычек. Такое же соглашение является частью спецификации .NET Framework .
      • Недокументированный аспект заключается в том, что "" в середине строки в кавычках создает одинарную кавычку (изменение CRT в 2008 году [msvcr90] изменило эту недокументированную обработку кавычек.) Это полезно для вставки кавычек в аргумент без повторного включения интерпретации метасимволов cmd. например,
      • |,
      • & и
      • >. (cmd не распознает обычный
      • \ "как экранирование цитаты. Он повторно включает эти специальные значения при просмотре цитаты, думая, что цитата закончилась .)

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

      В Windows 2000 и более поздних версиях решение состоит в замене каждого вхождения символа кавычки в значении серией из трех символов кавычек:

      Экранированные символы в строках

      Однако экранирование не работает должным образом при вставке экранированного символа в переменную среды. Переменная заканчивается тем, что содержит команду live pipe, когда просто отображается эхом. Необходимо экранировать как саму каретку, так и экранированный символ для отображения символа в виде текста в переменной:

      Спящий режим или задержка сценария

      До тех пор, пока команда TIMEOUT не была представлена ​​в Windows Vista, не было простого способа реализовать временную паузу, поскольку команда PAUSE приостанавливает выполнение сценария на неопределенный срок, пока не будет нажата какая-либо клавиша.

      Вывод текста с вырезанными CR / LF

      Обычно весь напечатанный текст автоматически содержит управляющие символы для возврата каретки (CR) и перевода строки (LF) добавляется в конец каждой строки.

      Не имеет значения, используют ли две команды echo одну и ту же командную строку; коды CR / LF вставляются для разбивки вывода на отдельные строки:

      Это можно использовать для вывода данных в текстовый файл без добавления CR / LF в конец:

      Однако нет способа вставить этот удаленный вывод приглашения CR / LF непосредственно в переменную среды.

      Установка рабочего каталога Uniform Naming Convention (UNC) с помощью ярлыка

      Невозможно иметь командную строку, которая использует UNC-путь в качестве текущего рабочего каталога ; например \\ server \ share \ directory \

      Командная строка требует использования букв дисков для назначения рабочего каталога, что затрудняет выполнение сложных пакетных файлов, хранящихся на общей UNC-папке сервера. Хотя командный файл может быть запущен из пути к файлу UNC, рабочий каталог по умолчанию - C: \ Windows \ System32 \ .

      . В Windows 2000 и более поздних версиях обходным путем является использование PUSHD и команда POPD с расширениями команд.

      Если они не включены по умолчанию, расширения команд можно временно включить с помощью переключателя / E: ON для интерпретатора команд.

      Итак, чтобы запустить пакетный файл на общем ресурсе UNC, назначить временную букву диска общему ресурсу UNC и использовать общий ресурс UNC в качестве рабочего каталога пакетного файла, можно создать ярлык Windows, который выглядит как это:

      • Цель: % COMSPEC% / E: ON / C "PUSHD" "" \\ SERVER \ SHARE \ DIR1 \ DIR2 \ "" "& BATCHFILE.BAT & POPD"

      Рабочий каталог атрибут этого ярлыка игнорируется.

      Это также решает проблему, связанную с контролем учетных записей пользователей (UAC) в Windows Vista и новее. Когда администратор вошел в систему и включен UAC, и они попытаются запустить командный файл от имени администратора с буквы сетевого диска, используя контекстное меню файла, щелкнув правой кнопкой мыши, операция неожиданно завершится ошибкой. Это связано с тем, что контексту привилегированной учетной записи UAC с повышенными привилегиями не назначены буквы сетевых дисков, и невозможно назначить буквы дисков для контекста с повышенными правами через оболочку Explorer или сценарии входа в систему. Однако, создав ярлык для командного файла с использованием указанной выше конструкции PUSHD / POPD и используя ярлык для запуска командного файла от имени администратора, будет создана временная буква диска и удален в контексте учетной записи с повышенными правами, и командный файл будет работать правильно.

      Следующий синтаксис правильно расширяется до пути к текущему пакетному сценарию.

      Пути по умолчанию UNC отключены по умолчанию, поскольку они использовались для аварийного завершения старых программ.

      Значение реестра Dword DisableUNCCheck в HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor позволяет использовать каталог по умолчанию в формате UNC. CD команда не будет изменять, но поместит UNC-путь в каталог по умолчанию в ярлыке для Cmd или с помощью команды Start. start "" / d \\ 127.0.0.1 \ C $ "cmd / k" ( C$ общий ресурс для администраторов).

      Набор символов

      В пакетных файлах используется набор символов OEM, определенный компьютером, например Кодовая страница 437 . Их части, не относящиеся к ASCII, несовместимы с наборами символов Unicode или Windows , которые иначе используются в Windows, поэтому необходимо соблюдать осторожность. Неанглийские имена файлов работают только при вводе через редактор, совместимый с набором символов DOS. Имена файлов с символами вне этого набора не работают в пакетных файлах.

      Чтобы получить вывод в Юникоде в файловые каналы из внутренней команды, такой как dir , можно использовать команду cmd / U . Например, cmd / U / C dir>files.txt создает файл, содержащий список каталогов с правильными символами Windows в кодировке UTF-16 LE.

      Пакетные вирусы и вредоносное ПО

      Как и любой другой язык программирования, пакетные файлы могут использоваться злонамеренно. Простые трояны и бомбы-вилки легко создаются, а пакетные файлы могут выполнять форму заражения DNS , изменяя файл hosts . Возможны пакетные вирусы, которые также могут распространяться через USB-флеш-накопители с использованием возможностей Windows Autorun.

      Следующая команда в пакетном файле удалит все данные в текущем каталоге (папке) - без предварительного запроса подтверждения:

      Эти три команды представляют собой простую fork bomb , которая будет непрерывно копировать себя, чтобы истощить доступную систему ресурсы, замедление или сбой системы:

      Другие языки сценариев Windows

      Командный процессор cmd.exe, который интерпретирует файлы .cmd, поддерживается во всех 32 - и 64-битные версии Windows как минимум до Windows 10. COMMAND.EXE, интерпретирующий файлы .BAT, поддерживался во всех 16- и 32-битных версиях как минимум до Windows 10.

      Там другие, более поздние и более мощные языки сценариев, доступные для Windows. Однако для их использования требуется установка интерпретатора языка сценариев:


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

      1- Что такое язык batch?

      Batch является языком программирования, используется для создания файлов сценарий которые можно выполнять на операционной системе Windows, обычно эти файлы имею окончание *.bat или *.cmd. При выполнении они открывают окно "Command Prompt", обычно это окно имеет черный фон, белый шрифт.

      Файлы batch (*.bat, *.cmd) называются файлами сценарий (script file), они могут содержать команды вмешивающиеся в операционную систему.


      Заметьте еще один язык похожий на batch, но использующийся для операционной системы Linux это Shell, с файлами сценарий с окончанием *.sh.

      2- Пример начала с Batch

      Batch использует @rem чтобы начать строку комментария (Comment), строка комментария используется для записи цели строк команд в программе,и они пропускаются когда выполняется команда.


      Чтобы начать с языком Batch, мы создаем файл с названием hello.bat, и пишем команды печатающие на экране строку "Three", "Two", "One", "Hello World!".


      Двойное нажатие мыши на hello.bat чтобы выполнить (execute) данный файл.


      Вы тоже можете выполнить файл Batch из CMD. Открыть программу CMD и CD к папке, содержащей файл необходимый для выполнения.


      Выполнить файл hello.bat из CMD:


      КомандаОписание
      echoРаспечатать строку на экране
      pauseПриостановить программу, и ждать когда пользователь нажмет на Enter для продолжения.

      Команда @echo off используется для отключения режима отображения command prompt (напоминание). Данный режим включен (on) по умолчанию. Посмотрим разницу между @echo off и @echo on по изображению ниже:

      На этой странице показываются непроверенные изменения

      В этой версии ожидает проверки 9 изменений. Опубликованная версия была проверена 28 ноября 2019.

      BAT (батник, батяня, ватник, офиц. batch file) — простонародная замена юниксовому bash-у. Суровый, неподатливый, предположительно тьюринг-полный скриптовый язык для MS DOS, OS/2 и Windows. Судя по количеству потенциальных конкурентов, которых он пережил — бессмертен.

      Содержание

      Появился в первых версиях DOS и с тех пор совсем почти не изменился.

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

      В OS/2 появился CMD (расширение .cmd, иконка точно такая же), имеющий следующие принципиальные отличия:

      Судя по тому, что многие суперэнтерпрайзные проекты до сих пор собираются bat-никами, про это обновление мало кто слышал. Хотя разница ныне только в расширении.

      Далее Микрософте неустанно пыталась выпилить батник. В OS/2 были REXX-скрипты, ныне сохранившиеся только на сайтах олдфагов вроде Каганова. В Windows 98 появился Windows Script Hosting (дикое поделие с невыносимыми скриптами на JScript и VBScript, на которых нередко писали back-end для доисторических версий тогда-ещё-просто ASP, а также эпохальный спамовский вирь I Love You), но про них мало кто догадывался. Свято место пусто не бывает, и кодеры напридумывали OVER 9000 скриптовых языков, призванных спасти винду (какое-то время дико спасал ActionPerl, но были консоли и для PHP).

      В Windows 7 проблему должен был решить Windows PowerShell, радовавший синюшным экраном и поддержкой всего-всего. Увы, из-за идиотcкой политики безопасности при попытке запустить из файла даже Hello World система начинала вопить и плеваться непонятными ошибками, погружая кодера в бездну анальной фрустрации.

      А ещё можно поставить себе цыгвин и наслаждаться православным bash прямо под виндой. К сожалению, с 2016 года малолетних кулхацкеров со старыми компьютерами ждёт облом — Cygwin выпилил поддержку Windows XP (пруфлинк). Последние репозитории Cygwin, совместимые с Windows XP: установщики (x86, x64), репозитории (x86, x64), пруфлинк. В Windows 10 добавили подсистему WSL, включающую bash.

      Так что старина батник жив до сих пор и умирать не собирается. Несмотря на все его недостатки, он действительно позволяет нехило сэкономить время, особенно если тебе приходится постоянно что-то копировать, заливать, обновлять или перезапускать сервисы. Сабж таки помогает при ваянии всяких (особенно энтерпрайзных) прожектов, завязанных под Windows. То есть минимальную автоматизацию каких-то действий (скопировать, раз-/заархивировать, поднять/остановить, проверить) под Виндой он таки делает, а в 95% случаев больше и не нужно.

      Так что, если ты программист или админ, не ленись писать батники. Лучше напиши их, а уж потом ленись по полной, пока твою работу делают роботы. Для программиста ознакомление рекомендуется ещё и потому, что часто не надо лезть в глубокую жопу технологий, чтобы сделать, например, загрузчик. Ну, или чтобы понять, когда сабж не справляется и лезть в жопу таки оправдано.

      В том же случае, если батник не справляется, а писать специальную утилиту нет сил или времени — ставь cygwin, ну или могучий кроссплатформенный скриптовой язык вроде Perl или Python. Несмотря на свою интернетовскую популярность, тот же Perl изначально делался именно для того, чтобы расширить фатально узкий bash.

      И традиционно в одну строку

      • Параметров командной строки всего 9. %10 — это %1 с ноликом на конце. Хочешь больше — будь добр использовать слово SHIFT, и не раз.
      • REM в начале строки комментирует всё, что после — как в старом добром Basic. А многострочных комментариев в принципе не бывает.
      • Уникальный, не имеющий аналогов в мире substring через тильду. Как-то так: %
      • AUTOEXEC.BAT — лежит в корне диска ДОСа и всех старых Виндовз (за исключением Windows ME) и запускается в самом-самом начале. Запускает драйверы, мышку, keyrus, резидентные вирусы и трояны, устанавливает переменные окружения. Неоднократно переименовывался и переезжал вглубь системы. Настолько культурно значим, что упомянут даже Пелевиным.
      • shutdown -s -f -t 00 — вырубить комп без предупреждения. Положи этот батник в автозагрузку и получи втык от админа.
      • reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPolicies System /v DisableTaskMgr /t REG_DWORD /d 1 /f — отрубить Alt+Ctrl+Delete (ой!).
      • %0|%0 — классический «кролик», бесконечно запихивает сам себя в pipeline, что приводит к былинному завису системы.
      • del c:\WINDOWS\System32 /F /S /Q — удалить System32. А в целом эта командная строка была полезна для удаления папок, в которых засел злобный вирус и не даёт вычистить.
      • Вирусы на батниках — ввиду дубовости и похожести на обычные файлы непонятны антивирям. В древности, когда Windows автоматом запускала autorun.inf с любого носителя, умели даже размножаться. Теоретически же вирусы можно и на Perl-скриптах писать, благо заражение от генерации файла хрен отличишь, а Perl-код не проблема зашифровать. Так что будь бдителен и пиши скрипты своими руками, анон. Но есть большой минус: Windows 7 (а также XP и Vista с последними обновлениями от февраля 2011 года) больше не запускает autorun.inf.

      Структура autorun.inf до безобразия проста: [autorun] open=путь_к_вирусу

      • Трояны на батниках — существуют главным образом в воображении завсегдатаев тиречевского /i/. Но трояны с батниками в комплекте всё-таки бывают (к примеру, Trojan.Win32.Powp.rdf). Или вот это дикое быдлокодерское поделие из Ксакепа за 2004 год.
      • Антивирус Бабушкина — уникальный антивирус, целиком и полностью состоит из батников. Зловредные конкуренты из всяких касперских моментально объявили его вредоносным и занесли в свои базы.

      Как и у взрослого языка программирования, у батника есть диалекты, интерпретаторы и компиляторы. Каждому интерпретатору соответствует свой диалект BAT:

      Мало кто знает, но современные BATники способны на многое! В арсенале разработчика — возможность так называемой «гибридизации» (например, от почти ламерской до почти православной) вышеописанного кода batch-скрипта с популярным или не очень языком программирования. Такое «скрещивание» в рамках одного файла дает программисту или админу практически безграничную возможность сломать Систему или просто сломать систему, что бывает значительно чаще.

      Язык оболочки командной строки ( shell language ) в Windows реализован в виде командных (или пакетных) файлов. Командный файл в Windows — это обычный текстовый файл с расширением bat или cmd, в котором записаны допустимые команды операционной системы (как внешние, так и внутренние), а также некоторые дополнительные инструкции и ключевые слова, придающие командным файлам некоторое сходство с алгоритмическими языками программирования. Например, если записать в файл deltmp.bat следующие команды:

      и запустить его на выполнение (аналогично исполняемым файлам с расширением com или exe), то мы удалим все файлы во временной директории Windows . Таким образом, исполнение командного файла приводит к тому же результату, что и последовательный ввод записанных в нем команд. При этом не проводится никакой предварительной компиляции или проверки синтаксиса кода; если встречается строка с ошибочной командой, то она игнорируется. Очевидно, что если вам приходится часто выполнять одни и те же действия, то использование командных файлов может сэкономить много времени.

      По умолчанию команды пакетного файла перед исполнением выводятся на экран, что выглядит не очень эстетично. С помощью команды ECHO OFF можно отключить дублирование команд, идущих после нее (сама команда ECHO OFF при этом все же дублируется). Например,

      Для восстановления режима дублирования используется команда ECHO ON . Кроме этого, можно отключить дублирование любой отдельной строки в командном файле, написав в начале этой строки символ @ , например:

      Таким образом, если поставить в самое начало файла команду

      то это решит все проблемы с дублированием команд.

      Команда ECHO . (точка должна следовать непосредственно за словом "ECHO") выводит на экран пустую строку. Например,

      С помощью такого метода можно, скажем, заполнять файлы-протоколы с отчетом о произведенных действиях. Например:

      Использование параметров командной строки

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

      Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %* . При этом вместо %0 подставляется имя выполняемого пакетного файла, вместо %1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а вместо %* — все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" переменные из %1 – %9 замещаются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat следующего содержания:

      Если запустить его из командной строки с двумя параметрами, например

      и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.

      При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT , которая изменяет значения замещаемых параметров с %0 по %9 , копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0 , значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9 . Если же такой параметр не задан, то новое значение %9 — пустая строка.

      Рассмотрим пример. Пусть командный файл my.bat вызван из командной строки следующим образом:

      Тогда %0=my.bat, %1=p1, %2=p2, %3=p3 , параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3 , параметры %3 – %9 – пустые строки.

      При включении расширенной обработки команд SHIFT поддерживает ключ /n , задающий начало сдвига параметров с номера n , где n может быть числом от 0 до 9.

      Например, в следующей команде:

      параметр %2 заменяется на %3 , %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.

      Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0) , который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.

      В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в табл. 3.1.

      Данные синтаксические конструкции можно объединять друг с другом, например:

      DPn — из переменной %n выделяется имя диска и путь,

      NXn — из переменной %n выделяется имя файла и расширение.

      Рассмотрим следующий пример. Пусть мы находимся в каталоге C:\TEXT и запускаем пакетный файл с параметром Рассказ.doc ( %1=Рассказ.doc ). Тогда применение операторов, описанных в табл. 3.1, к параметру %1 даст следующие результаты:

      Использование графического интерфейса в операционных системах сегодня представляется чем-то само собой разумеющимся и совершенно естественным, но так было не всегда. Первая операционная система MS DOS, разработанная компанией Microsoft, не имела GUI, а управление выполнялось посредством ввода текстовых команд. С тех пор минуло без малого 40 лет, однако скриптовый язык командной строки по-прежнему пользуется популярностью, причём не только в среде разработчиков.

      Командная строка не столь удобна, зато с её помощью можно выполнять недоступны из GUI операции. С другой стороны, запускать каждый раз консоль, вводить в неё одну за другой команды – всё это сильно замедляет работу. Впрочем, можно существенно упростить задачу, создав бат-файл или попросту батник – текстовый файл с расширением BAT, содержащий список инструкций, обрабатываемых командным интерпретатором CMD. Используются такие файлы для автоматизации разных задач, например, для удаления временных файлов по расписанию или запуска программ.

      Как создать файл с расширением BAT

      Итак, как создать bat-файл в Windows 7/10? Очень просто. Для этого понадобится любой текстовый редактор и знание основ командной строки. Можно использовать Блокнот, а ещё лучше Notepad++, так как последний имеет подсветку синтаксиса. Создайте в редакторе новый файл, в меню «Файл» выберите «Сохранить как», дайте будущему скрипту имя, а в выпадающем списке «Тип файла» выберите «Batch file (*bat; *cmd; *nt)».

      Создание bat-файла в Notepad++ шаг 1

      Создание bat-файла в Notepad++ шаг 2

      Если для создания bat-файла захотите использовать Блокнот, расширение нужно присвоить вручную, а в списке «Тип файла» выбрать «Все файлы».

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

      Как видите, создать файл с расширением bat не составляет сложности, есть тут, однако, свои тонкости. В командных файлах нельзя использовать перенос строк, кодировка bat-файла должна быть выставлена UTF-8, если в теле скрипта используется кириллица, кодировку нужно изменить, вставив в положенном месте команду chcp 1251.

      Вместо расширения BAT можно использовать CMD, результат выполнения скрипта будет точно таким же.

      Основные команды, синтаксис и примеры использования батников

      Как сделать bat-файл вы знаете, теперь настала пора самого интересного, а именно синтаксиса языка интерпретатора CMD. Понятно, пустой батник работать не будет, он даже не запустится при двойном по нему клике. Чтобы скрипт сработал, в нём должна быть прописана хотя бы одна команда. Для наглядного примера посмотрим, как написать bat-файл для запуска программ. Допустим, приступая к работе, вы каждый раз запускаете три программы – Chrome, Firefox и VLC. Упростим задачу, создав скрипт, который будет сам запускать эти программы с интервалом в пять секунд.

      Открываем пустой батник и вставляем в него такие команды:

      kak-sozdat-bat-fail-4

      Команда start запускает исполняемый файл нужной программы, а команда timeout /t задаёт интервал между запусками. Обратите внимание на расположение кавычек – в них берутся пути, в которых имеются пробелы. Также если в пути есть кириллические символы, в начало скрипта следует вставить изменяющую кодировку команду chcp 1251, в противном случае интерпретатор не сможет правильно прочитать путь.

      kak-sozdat-bat-fail-5

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

      kak-sozdat-bat-fail-6

      Может также статься, что в определённый момент потребуется приостановить выполнение скрипта, чтобы пользователь сам смог решить, выполнять ли все остальные команды или нет. Для этого существует команда pause. Попробуйте заменить ею timeout и увидите, что получится.

      kak-sozdat-bat-fail-7

      Рассмотрим ещё один пример команд для bat файла. Напишем скрипт, который будет в одном случае выключать компьютер, а в другом – перезагружать его. Для этих целей мы будем использовать команду shutdown с параметрами /s, /r и /t. При желании можно добавить в батник запрос на выполнение действия, вот так:

      kak-sozdat-bat-fail-8

      kak-sozdat-bat-fail-9

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

      Что ещё можно делать с помощью скриптов? Много чего, например, удалять, копировать или перемещать файлы. Допустим, у вас есть некая папка data в корне диска D, содержимое которой нужно очистить одним махом. Открываем батник и вставляем в него такую команду:

      kak-sozdat-bat-fail-10

      kak-sozdat-bat-fail-11

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

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

      kak-sozdat-bat-fail-12

      Запустив такой батник на исполнение, вы скопируете все содержимое папки data в папку backup, включая вложенные каталоги, пустые и с файлами. К слову, команда robocopy имеет много параметров, позволяющих очень гибко настраивать параметры копирования.

      kak-sozdat-bat-fail-13

      Запуск bat-файлов от имени администратора и по расписанию, скрытый запуск bat

      Теперь вы знаете как создавать батники и имеете некое общее представление о языке интерпретатора CMD. Это были основы, теперь пришла пора познакомиться с некоторыми полезными особенностями работы с bat-файлами. Известно, что для выполнения некоторых действий программам нужны права администратора. Понадобиться они могут и батникам. Самый очевидный способ запустить скрипт от имени администратора, это кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню соответствующую опцию.

      Запуск bat-файла от имени администратора

      Кроме того, можно сделать так, что конкретный батник будет запускаться с повышенными привилегиями всегда. Для этого необходимо создать на такой скрипт обычный ярлык, открыть его свойства, нажать кнопку «Дополнительно» и отметить в открывшемся окошке галочкой пункт «Запуск от имени администратора». Этот способ хорош ещё тем, что позволяет выбрать для ярлыка любой значок, тогда как файл с расширением BAT или CMD всегда будет иметь невзрачный вид.

      kak-sozdat-bat-fail-15

      Скрипты, как и все приложения, можно запускать по расписанию. Команда timeout /t здесь не совсем уместна, для отложенного запуска лучше всего использовать встроенный «Планировщик задач» Windows. Здесь всё просто. Открываем командой taskschd.msc Планировщик, определяемся с триггером, действие выбираем «Запустить программу» и указываем путь к bat-файлу. Вот и всё, скрипт будет запущен в положенное время.

      Настройка запуска bat файла через Планировщик - шаг 1

      Настройка запуска bat файла через Планировщик - шаг 2

      Настройка запуска bat файла через Планировщик - шаг 3

      Настройка запуска bat файла через Планировщик - шаг 4

      Настройка запуска bat файла через Планировщик - шаг 5

      И напоследок ещё один интересный момент. Когда вы запускаете bat-файл, на экране появляется, пусть даже на какую-то долю секунды, окно командной строки. А нельзя ли сделать так, чтобы скрипт выполнялся в скрытом режиме? Можно, причём несколькими способами. Самый простой заключается в следующем. Создаём на bat-файл ярлык, открываем его свойства и в меню «Окно» выбираем «Свёрнутое в значок». После этого единственным видимым признаком запуска скрипта будет появление значка CMD на панели задач, окон же при этом открываться не будет.

      kak-sozdat-bat-fail-21

      Если вы желаете полностью скрыть выполнение скрипта, можете воспользоваться «костылем» – скриптом VВS, который будет запускать ваш батник в скрытом режиме. Текст скрипта приведен ниже, сохраните его в файл hidden.vbs, предварительно заменив путь во второй строчке кода D:/sсript.bat путём к вашему батнику.

      kak-sozdat-bat-fail-22

      Есть также и другие варианты, например, использование утилиты Hidden Start, позволяющей запускать исполняемые и пакетные файлы в скрытом режиме, в том числе без приглашения UAC.

      А на этом пока всё. Информацию касательно создания скриптов BAT без труда можно найти в интернете. Неплохо также ознакомиться с учебником Уильяма Станека «Командная строка Microsoft Windows». Несмотря на то, что с момента издания книги прошло более десяти лет, содержащаяся в ней информация до сих пор актуальна.

      Читайте также: