Условия в bat файле

Основные команды, примеры использования BAT-файлов

Принцип создания батников прост и понятен, но основные сложности связаны с его содержимым – без команд такой файл бесполезен. Самый простой и, кстати, наиболее часто используемый пример команды – это уже рассмотренный нами запуск программ, или команда start. Её полный синтаксис занимает несколько строк, при желании вы сможете ознакомиться с ним, отыскав соответствующие инструкции. Мы же пока рассмотрим, как можно автоматизировать простой запуск трёх программ, которые вы используете в своей ежедневной работе. Пускай это будут Chrome, VLC и Total Commander.

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

Батник будет иметь вид:

Зачем нужны пустые кавычки, вы уже знаете. Команда timeout с параметром /t указывает временной интервал до запуска следующей команды.

Если бы в пути не было папок с пробелами, их можно было бы указывать без кавычек.

Стандартный способ выполнения этого BAT-файла предполагает, что при выполнении скрипта будет открыто три окна консоли, которые закроются автоматически, как только отработка команды завершится. Но существует способ запуска команд старт в одном окне терминала. Для этого сразу после директивы start добавляется параметр /b, и только затем – всё остальное.

Иногда для запуска программ через батник, требуется реакция пользователя, то есть он должен сам решать, когда должна стартовать следующая программа. В таких случаях вместо timeout ставят директиву pause без параметров, в результате чего после запуска каждой программы будет появляться сообщение «Нажмите любую клавишу для продолжения».

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

Пример такого скрипта:

Первая директива указывает, что при выполнении команд они не должны выводиться на экран. Со второй строкой всё понятно – мы хотим использовать кириллические символы. Команда echo служит для вывода содержимого параметра в кавычках на монитор. Действие директивы pause вам тоже известно. Наконец, команда shutdown инициирует выключение ПК (если указан параметр /s) или его перезагрузку (/r), а параметр /t задает задержку в секундах перед выполнением команды.

В принципе для выполнения основного действия достаточно пятой строки, без использования предыдущих четырёх.

Иногда, несмотря на присутствие директивы chcp 1251, кириллические символы выводятся крякозябрами. Попробуйте в таких случаях использовать кодировку ANSI.

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

Так, команду del можно использовать для удаления папок и/или файлов, её аналогом является команда erase. Среди используемых параметров отметим следующие:

  • /p – указывает, что перед удалением файла/каталога нужно ответить утвердительно на запрос системы;
  • /f – удаление даже тех файлов, которые имеют атрибут «только для чтения»;
  • /s – удаление каталога вместе с внутренним содержимым, всеми подкаталогами и файлами;
  • /q – удалять файлы, не спрашивая подтверждения.

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

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

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

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

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

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

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

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

Set WshShell = CreateObject("WScript.Shell")  WshShell.Run chr(34) & "D:script.bat" & Chr(34), 0  Set WshShell = Nothing  

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

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

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

Определение

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

Яркие примеры её применения таковы:

  1. Заражение компьютера вирусами или программами-вредителями.
  2. Неполадки в системных файлах.
  3. Восстановление Windows (на сленге пользователей – «винды»).
  4. Корректировка опций в играх.

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

Работать с ней требуется очень внимательно и осторожно. В прописанных командах не должно быть ошибок

Иначе можно получить совершенно неожиданные результаты, преобразующиеся в дальнейшем в проблемы.

Как можно избежать использования goto?

Любой хоть сколько-то осмысленный *.bat-файл длиной больше 50 строк является ярким лозунгом в поддержку работы Дейкстры «О вреде оператора goto». Мешанина из переходов вперед и назад действительно является кодом «только для записи». Можно ли что-то предпринять по этому поводу?

На самом деле можно. Как правило, большинство меток и переходов используются для организации ветвлений при проверке условий, т.е. банальных if-then-else блоков. В оригинале, bat-язык поддерживал только одну команду в блоке then, что автоматически приводило к идиомам вида:

      if condition goto :THEN
rem Команды ветки ‘else’
rem ...
goto IF_END
:THEN
rem Команды ветки ‘then’
rem ...
:IF_END

Но к счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения меток. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):

      if condition (
    rem Команды ветки ‘then’
rem ...
) else (
    rem Команды ветки ‘else’
rem ...
)

Конкретный пример использования:

      @echo off

set BUILDMODE=%1

if "%BUILDMODE%" == "" (
    echoFAIL: Аргумент является обязательным ^(--debug, --release^)exit /b 1
)

rem Удаляем из аргумента все дефисы для упрощения обработки
set BUILDMODE=%BUILDMODE:-=%

if "%BUILDMODE%" == "debug" (
    echoINFO: Устанавливаем debug-режим окруженияset CCFLAGS=/Od /MDd /Z7
) else (
    echoINFO: Устанавливаем release-режим окруженияset CCFLAGS=/O2 /MD
)

На мой взгляд, с этим уже вполне можно жить. Но, как всегда, жизнь не так проста, как кажется. Есть одна проблема. Переменные, использующиеся в блоках then и else, раскрываются перед началом выполнения этих блоков, а не в процессе выполнения. В приведенном примере это не вызывает никаких проблем, однако в следующем вызовет:

      if "%BUILDMODE%" == "debug" (
    echoINFO: Устанавливаем debug-режим окружения
set OPTFLAGS=/Od
    set CCFLAGS=%OPTFLAGS% /MDd /Z7
) else (
    echoINFO: Устанавливаем release-режим окружения
set OPTFLAGS=/O2
    set CCFLAGS=%OPTFLAGS% /MD
)

Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.

Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды

      setlocal enabledelayedexpansion

в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.

С учетом сказанного предыдущий «неправильный» пример может быть исправлен так:

      setlocal enabledelayedexpansion

rem ...
if "%BUILDMODE%" == "debug" (
    echoINFO: Setting up debug mode environment
set OPTFLAGS=/Od
    set CCFLAGS=!OPTFLAGS! /MDd /Z7
) else (
    echoINFO: Setting up release mode environment
set OPTFLAGS=/O2
    set CCFLAGS=!OPTFLAGS! /MD
)

Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…

Но в любом случае, это гораздо лучше безумного количества меток и переходов.

Что такое bat-файлы и зачем они нужны?

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

 
Что такое bat-файлы?

Bat-файлы или «батники» называют так из-за их разрешения (BAT). Bat-фалы это по сути текстовые файлы, которые содержат от одной до нескольких строчек кода командной строки. Запуск BAT-файлов выполняется простым двойным кликом по нему. Записанные в нем команды будут выполняться последовательно, при этом появится окошко командной строки. После завершения выполнения команд окно командной строки закроется. Вы моги замечать, как работают такие файлы при установке игр и приложений. В таких окнах очень часто происходит распаковка архивов большой степени сжатия с отображением процента распаковки. Если же «батник» содержит всего несколько простых команд, то окно командной строки может появиться всего на несколько миллисекунд и исчезнуть с экрана.

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

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

 
Как создать bat-файлы?

Предположим, вам необходимо создать «батник», который будет запускать определенные программы в заданной последовательности. При этом чтобы не создавать на рабочем столе несколько ярлыков и запускать каждый из них мышкой удобно создать один единственный bat-файл и запускать его, а он уже в свою очередь запустит все те приложения.
Для создания bat-файла вам понадобится простой текстовый редактор, традиционно в системе Windows пользуются Блокнотом. Запустите текстовый редактор и впишите в него несколько строк, которые соответствуют синтаксису команд командной строки.

Например, для запуска приложений:

start explorestart calcstart iexplore

После чего сохраните этой файл на Рабочем столе с понятным для вас именем, например «Запуск прог». Расширение сохраненного файла при этом надо изменить с TXT на BAT. Если у вас не отображается расширение файла, то необходимо включить отображение расширений файлов. Сделать это можно в настройках параметров папки через Панель управления или в самом проводнике. После того, как вы поменяете расширение, сделайте пробный запуск сохраненного файла. При выполнении указанного выше примера произойдет запуск сразу трех программ: Проводника, Калькулятора и Internet Explore.

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

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

Посмотрите ещё :

  • Как сменить путь в командной строке

  • Проверка и восстановление системных файлов Windows 7/8

  • Total Commander

  • Ошибка 720 при подключении VPN-соединения

  • Создание ярлыков быстрого вызова служб Windows 8

Категория: Полезные статьи

Что это за упомянутые ранее операторы объединения команд?

Это операторы &, && и ||. Они практически совсем не освещены в документации, но полезны в повседневности. Они позволяют объединять несколько команд в одну, т.е. примерно так:

command1 & command2
command1 && command2
command1 || command2

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

command1
command2

Оператор && гарантирует, что вторая команда будет выполнена только, если первая была выполнена успешно, т.е. с нулевым кодом возврата (он же %errorlevel%). Такие конструкции очень популярны в мире shell-сценариев Unix. Например:

      cd sources && make clean

Я был приятно удивлен, узнав, что cmd.exe тоже умеет выполнять такие конструкции. Это безопаснее и правильнее, нежели простое последовательное выполнение этих команд, и короче и проще, чем строгая проверка и обработка кодов возврата. Очень удобно при написании на скорую руку. Не менее полезен иногда и оператор ||. Суть его тоже логична – выполнить вторую команду, если первая дала сбой. Часто встречается в таких идиомах:

      cd sources || exit 1

Если перейти в каталог sources не удастся, то будет произведен выход с кодом ошибки 1. Если же первая команда отработает нормально, то вторая выполнена не будет. Например, такая простейшая защита помогла бы в случае с cd по UNC-адресу, описанному ранее.

Что собой представляет BAT-файл

С точки зрения пользователя компьютера это текстовый файл с соответствующим расширением, но для операционной системы такие файлы особенные – они состоят из ряда команд, которые после запуска интерпретируются и выполняются по определённым правилам. Таким образом, ответ на вопрос, что такое батник для компьютера под управлением ОС Windows, может звучать следующим образом: это набор команд, записанный в текстовом формате, позволяющий сэкономить время на их наборе каждый раз, когда возникнет необходимость. Сленговое название таких файлов – батник, их также называют пакетными файлами.

С помощью таких батников можно автоматизировать целые классы задач:

  • осуществлять управление файловой системой компьютера (удалять, создавать, перемещать файлы, каталоги, подкаталоги);
  • выполнять последовательность команд с определёнными параметрами, которые могут быть контекстно-зависимыми;
  • осуществлять пакетный запуск программ/утилит.

Операторы перехода

Командный файл может содержать метки и команды GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается при обработке командного файла как метка. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Приведем пример.

Пусть имеется командный файл следующего содержания:

После того, как в этом файле мы доходим до команды

его выполнение продолжается со строки

В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).

Также для перехода к метке внутри текущего командного файла кроме команды GOTO можно использовать и рассмотренную выше команду CALL:

При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза достичь его конца. Первый выход возвращает управление на инструкцию, расположенную сразу после строки CALL, а второй выход завершает выполнение пакетного файла. Например, если запустить с параметром “Копия-1” командный файл следующего содержания:

то на экран выведутся три строки:

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

Запуск программ в bat-файлах с ключами

Программы в bat-файле можно не только запускать, но и устанавливать им дополнительные команды (ключи) запуска. Например, если запустить bat-файл с записью: start /?, он отобразит на DOS-экране список используемых с этим оператором ключей с необходимыми пояснениями.

Запуск программ в bat-файлах с ключами

Пример используемых ключей, где: — minimize – ключ для минимизации программы после ее запуска, — hide_splash – ключ для сворачивания программы в трэй.

Пример используемых ключей

Команда создания папки выполняется в bat с помощью оператора MKDIR (MD). Если запустить приведенный в примере bat-файл, он создаст четыре вложенные папки на диске С.

Команда создания папки выполняется в bat с помощью оператора MKDIR

Следующий пример – как открыть не один, а сразу несколько каталогов на диске С.

Команда для открытия нескольких каталогов на диске С

Создание BAT-файла в Виндовс 7

Создать этот исполняемый файл может каждый пользователь, которые имеет соответствующие права на ПК. Нередко система блокирует подобные файлы автоматически, так как «батники» далеко не всегда являются безопасными для ОС. Соответственно необходимо озаботиться снятием запрета системы на выполнение .BAT файлов и предоставить доступ пользователю к запуску «батников».

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

Способ 1: С помощью Notepad++

Этот текстовый редактор, по сути, является аналогом обычного Блокнота, но при этом обладает десятками различных инструментов и более тонкими настройками.

  1. Наведите курсором на чистое место на рабочем столе и кликните ПКМ.
  2. В появившемся списке выберите пункт «Создать» и нажмите на раздел «Текстовый документ».

После этих действий на рабочем столе отобразится новый созданный документ. Желательно присвоить ему такое же название, которое будет у файла .BAT.
Кликните по текстовому документу ЛКМ и в появившемся меню выберите вариант «Edit with Notepad++». Теперь файл отобразится в расширенной версии редактора.
Прежде всего, следует указать правильную кодировку файла. Для этого нажмите на раздел «Кодировки», который находится в верхнем основном меню, и выберите вариант «Кириллица». Кодировку следует поменять на «OEM 866».

Код, который вы собираетесь использовать, требуется просто вставить в текстовое поле редактора. В статье для примера будет рассматриваться самая простая команда «shutdown.exe -r -t 00». С ее помощью осуществляется перезагрузка ПК, нули в коде – интервал задержки, который в данном случае нет необходимости использовать.
После вставки команды необходимо сделать из обычного файла исполняемый. Для этого нужно открыть раздел «Файл» и нажать на пункт «Сохранить как».

Перед вами отобразится Проводник, в котором требуется указать расположение и название документа. Файл будет находиться на рабочем столе, а в названии необходимо изменить тип файла. Выберите напротив соответствующей надписи вариант «Batch file». После этого к указанному названию документа прибавится приставка .BAT.

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

Способ 2: Воспользоваться утилитой Блокнот

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

  1. Создайте на рабочем столе текстовый документ и откройте его.
  2. Впишите необходимую команду, после чего нажмите на раздел «Файл» и выберите пункт «Сохранить как».
  3. Перед вами отобразится Проводник, с помощью которого необходимо изменить название документа. Допишите после имени файла слово «.BAT» и нажмите «Сохранить».

Оба описанных в статье текстовых редактора могут создавать файлы .BAT. Блокнот имеет менее насыщенный функционал в сравнении с приложением Notepad++, поэтому используется для создания более простых команд. С помощью последнего можно делать сложнейшие исполняемые файлы, указывать очередность, периоды и многое другое. Чтобы не возникали проблемы с доступом к файлам, старайтесь работать с «батниками» от имени администратора ПК. Помните, что используя сложные команды можно автоматизировать практически любые процессы в ОС.

Как получить короткое (8.3) имя файла?

«А зачем? – спросите вы – Ведь мы живем в мире Интернета, Web-сервисов и NTFS с длинными именами файлов». Это действительно так, но иногда встречаются программы, которые отчаянно сопротивляются прогрессу, и в частности, не любят имен файлов и полных путей с пробелами. Одной из таких программ, кстати, является утилита build.exe из Windows DDK… В таких ситуациях спасает использование короткого, «беспробельного» DOS-имени для файла.

ПРЕДУПРЕЖДЕНИЕ

Доступ к файлу по короткому имени может быть не всегда возможен. На файловой системе NTFS создание коротких псевдонимов для файлов может быть отключено путем установки в единицу значения «NtfsDisable8dot3NameCreation» в ключе реестра «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem».

Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 — %9 можно использовать префикс

%~s1        - expanded path contains short names only

который нам как раз мог бы помочь. Но есть засада – все эти полезные префиксы нельзя использовать с произвольной переменной окружения, а присваивание переменным %0 — %9 не поддерживается. К счастью, описываемые префиксы можно еще использовать с переменными цикла for, и это дает нам способ достичь требуемого результата. Например, вот так можно получить 8.3-путь к “Program Files”:

      for /d %%i in ("%PROGRAMFILES%") do (
    set PROGRAMFILESSHORT=%%~si
)

echo8.3-имя для каталога "%PROGRAMFILES%" -^> "%PROGRAMFILESSHORT%"

Этот и другие модификаторы можно использовать и с любой другой формой цикла for, подробнее о которых можно узнать из:

      for /?
Добавить комментарий

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

Adblock
detector