Введение
Предостережение! Данная тема должна осваиваться пользователем(!) именно в том объеме, который приведен здесь (IMHO), то есть — в единицах процентов.
Максимум — еще пару «уровней» вглубь, если возникнет такая потребность.
Углубление знаний до уровня, близкого к полному, заведет в тупик.
Подобные задачи следует решать с помощью языков программирования высокого уровня, что упростит решения и значительно увеличит скорость, но относится к сфере профессионального выполнения.
Речь идет о программировании, что не терпит единственного решения.
Но в примерах, как правило, приводится именно одно.
Это не означает, что нет более правильного, быстрого и логичного.
Просто так требуется для конкретного описания.
Советы и предложения приветствуются, но не неконструктивная критика.
За несколько лет наполнения страница разрослась очень сильно (почти 100 КБ), но пока разделяться не будет.
Приношу свои извинения за неудобство работы с ней.
N.B.! ВСЕ примеры проходят тестирование и на 100% работоспособны, но я — не бог.
Любые допущенные ошибки, например, при редактировании в процессе публикации на сайт, прошу озвучивать.
По-прежнему, как 10, 20, 30 и 40 лет назад, у пользователя сохраняется возможность индивидуально оптимизировать свою работу, переложив часть интеллектуального труда на плечи компьютера.
Для этого можно использовать так называемые командные или пакетные файлы, без преувеличений, от десятков до тысяч раз облегчающие работу с файловой системой.
Никакой разработчик никогда не сделает этого за вас, так как у всех свои индивидуальные потребности.
Без какого-либо сомнения, следует говорить, что сегодня в мире ежедневно запускаются миллиарды таких файлов.
В том числе разработанные десятилетия назад.
И никто ничего менять не собирается!
Эти файлы являются текстовыми, имеют расширение bat или cmd и содержат простейшие команды, понимаемые операционной системой, которые могут быть выполнены в командной строке.
Основные области применения:
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Для меня будет крайне радостно, если вы воспользуетесь хотя бы вариантами 2–4.
От вариантов 7 и 8 вам, скорее всего, не уйти.
Какое из двух приведенных расширений использовать?
Расширение bat использовалось для DOS (16-разрядный интерпретатор command.com), а cmd возникло для интерпретатора командной строки cmd.exe.
Поэтому ряд действий может не производиться из bat-файла, либо исполняться медленнее, хотя большинство пользователей этого никогда не заметит.
А bat-файлы рассматриваются Windows в качестве командных.
Некоторые символы в командных файлах нельзя использовать в строках, не заключенных в кавычки, так как они имеют специальное назначение. Например: ( ) ^ & |.
Внимание! Русский текст для корректного исполнения/отображения должен быть набран в кодировке DOS (ASCII), то есть CP866.
В FAR вы должны видеть ANSI (Win) на месте подсказки к клавише F8. Последняя является переключателем кодировки.
Либо переопределить ее вызовом списка кодировок клавишей Shift+F8.
Поскольку Блокнот такой возможности напрямую или в принципе (ранние версии) не поддерживает, выводы можете сделать сами
Важный момент связан с запуском неправильно работающей и/или зависшей программой.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Пример (очень глупый, зато и очень наглядный):
@echo off cls title Тестирование пакетного файла echo Интересно, заработает ли? echo. echo Запуск Блокнота start notepad echo. echo Запуск Wordpad Wordpad echo. pause exit |
Разберем программу построчно.
@echo off (отключить вывод сообщений)
cls (очистить экран, от CLear Screen)
title Тестирование пакетного файла (Заголовок окна, о котором большинство в спешке и рутине забывает. Естественно, для сиюминутных задач это будет излишеством.)
echo Интересно… (Просто бла-бла на экране)
echo. (Точка означает вывод пустой строки, то есть зрительное отделение)
echo Запуск Блокнота (Информация для пользователя)
start notepad (Запуск программы)
Wordpad (Запуск программы. Слово start опущено.
Расширение (exe) не указано, как и для Блокнота, так как программы находятся в папках, описанных системной переменной PATH.)
pause (выведет фразу «Press any key to continue…» и будет ожидать нажатия, чтобы вы все смогли прочитать.)
exit (закроет окно, иначе придется печатать эту команду руками, либо жать крестик, что для DOS-сессии категорически НЕДОПУСТИМО)
Обратите внимание, что в бухгалтерском деле до сих пор используются DOS-приложения.
Если вы их закроете крестиком, то почти неизбежна потеря информации или даже разрушение базы данных
Командная строка for – перебор значений
Для перебора значений используется следующий синтаксис:
for /L %%переменная in (начало, шаг, конец) do (оператор)
Ключ /L
говорит о том, что происходит перебор данных, далее следует имя переменной, в которую эти данные будут записываться. В круглых скобках нужно через запятую указать три параметра:
-
начало
– начальное значение -
шаг
– тут мы указывает, насколько нужно увеличивать или уменьшать начальное значение при каждой итерации. То есть, если параметр содержит отрицательное число, то будет происходить уменьшение, иначе – увеличение параметра “начало”. -
конец
– тут нужно указать конечное значение, именно оно и будет определять, завершать цикл или нет. То есть, при каждой итерации происходит сравнивание начального и конечного параметра.
Давайте рассмотрим такой пример:
@ echo off for / L %% B in (0 ,1 ,5 ) do echo %% B echo. for / L %% B in (5 ,-1 ,0 ) do echo %% B |
В данном сценарии используются два цикла for командной строки, первый задает диапазон цифр от 0 до 5 с шагом 1, второй – диапазон цифр от 5 до 0 с шагом -1. То есть, прямой и обратный порядок. Функция ЭХО будет в виде списка выводить содержимое переменной B. Команда “echo.” вставляем между списками пустую строку.
Теперь попробуем найти сумму чисел от 0 до 100:
@ for set |
Сначала мы отключаем вывод эхо-отображений. Потом мы объявляем переменную summ с помощью ключевого слова set и присваиваем ей ноль. Далее в цикле for задаем начальное значение в 0, шаг в 1 и конечное значение в 100. Суммирование происходит в строке set/A summ+=%%B
, тут к содержимому переменной summ будет добавляться содержимое переменной %%B. В конце мы выводим конечный результат и удаляем из окружения summ.
Теперь давайте посмотрим, как будет выглядеть код для нахождения факториала числа 5:
@ for set |
Тут практически тот же самый синтаксис, за исключением того, что мы задали отрицательный шаг и использовали оператор *=.
Хорошо, теперь усложним задачу: найдем сумму чисел от 0 до 10, исключив из расчета числа 5, 7 и 9:
@ for echo set |
Как видим, для проверки условия мы использовали условный оператор if. К сожалению, в командной строке нет логических операторов тип “ИЛИ” и “И”, как например, в языках и , поэтому нам пришлось создавать вложенные операторы if. В результате, мы получили число 34
Также обратите внимание на оператор “neq
” – проверка условия типа “НЕ РАВНО”
Заметки
- Если условие, заданное в команде if
, выполняется, будет выполнена команда,
следующая за условием. Если условие не выполняется, команда, заданная в операторе if
,
пропускается, а управление переходит к команде оператора else
, если она задана. - Когда программа завершается, она возвращает код завершения. С помощью параметра
errorlevel
коды завершения можно использовать в качестве условий. - Использование команды defined
переменная
При использовании команды defined
переменная
добавляются следующие три
переменные: %errorlevel%
, %cmdcmdline%
и %cmdextversion%
.%errorlevel%
errorlevel
, если только уже не существует переменная среды с именем ERRORLEVEL. В
этом случае будет использовано ее значение. В следующем примере показано использование
значения errorlevel
после выполнения пакетной программы:goto answer%errorlevel%
:answer0
echo Код возврата программы равен 0
:answer1
echo Код возврата программы равен 1
goto end
:end
echo Готово!Операторы сравнения оп_сравнения
также можно использовать следующим образом:If %errorlevel% LEQ 1 goto okay
%cmdcmdline%
замещается исходной командной строкой, переданной Cmd.exe, до ее
обработки в Cmd.exe, если только уже не существует переменная среды с именем
cmdcmdline
. В этом случае будет использовано значение cmdcmdline
.%cmdextversion%
замещается строковым представлением текущего значения
cmdextversion
, если только уже не существует переменная среды с именем
CMDEXTVERSION. В этом случае будет использовано ее значение. - Использование оператора else
Оператор else
должен размещаться в той же строке, что и команда if
. Пример:IF EXIST имя_файла. (del имя_файла.) ELSE (echo имя_файла. отсутствует.)
del
должна
заканчиваться новой строкой:IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
Приведенный ниже пример не будет работать, поскольку команда else
должна
находиться в той же строке, что и команда if
:IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. отсутствуетЕсли необходимо разместить всю инструкцию в одной строке, можно использовать следующую
правильную форму исходной инструкции:IF EXIST имя_файла (del имя_файла) ELSE echo имя_файла отсутствует
Длинныe имена в bat-файлах
Теперь поговорим о путях и пробелах. Первый способ избежать этой проблемы — использование короткого имени.
В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~
. Так как папки Program Files
и Sound Club
у меня в единственном числе, получится следующее:
Program Files — Progra~1
Sound Club — SoundC~1
start
C:\Progra~1
\SoundC~1
\scw.exe
Если рядом будут присутствовать две папки, например Sound Club
и Sound Clown
, то следуя правилам, в примере выше надо будет указать SoundC~2
, так как в этом случае Sound Club
окажется вторым именем (имена считаются в алфавитном порядке).
Но этот способ неудобен тем, что приходится указывать порядковые номера. Ситуация с Program files
более менее нормальная. Мало у кого встретится две подобные папки на системном диске. Но если вы решили установить несколько продуктов Mozilla
на свой компьютер. У вас получится несколько папок, например:
Mozilla Firefox
Mozilla Thunderbird
Mozilla Sunbird
Короткими именами для них будут
Mozill~1
Mozill~2
Mozill~3
А теперь представьте, что вы написали BAT файл с упоминанием этих программ. Если удалить Firefox, оставшиеся записи перестанут работать, а если удалить Thunderbird, перестанет работать запись для Sunbird. Короче, способ с короткими именами — не наш способ.
Условный оператор if – как грамотно оформить код
Koza Nozdri
, видел твои коды.
Очень красивы, но Имхо, бессмысленны с точки зрения отладки ошибок и понимания логики переходов по условиям.
Очень рекомендую множество вложенных условий формировать по уровням,как это делается на ЯВУ (языках высокого уровня).
Иначе, большая вероятность, потерять скобку.
Т.е. простейший IF для строк (с игнорированием регистра букв – ключ /i ) будет:
Для оператора возврата кода ошибки:
Оператор errorlevel 1 – означает что мы сравниваем %errorlevel% с 1. Если код ошибки >= 1, то условие выполняется (true).Для логического сравнения чисел кавычки убираем:
Справка
if /?
EQL – равно (или просто знак == )NEQ – не равноLSS – меньшеLEQ – меньше или равноGTR – большеGEQ – больше или равно,Не забывай, что:= это знак присвоения. Работает только с Set.== это знак сравнения. Работает в операторе IF.Посмотри в коде Рекурсивный Dir /X (под спойлером) на сколько хорошо прослеживается логика вложенных условий.
§
Koza Nozdri
, видел твои коды.
Очень красивы, но Имхо, бессмысленны с точки зрения отладки ошибок и понимания логики переходов по условиям.
Очень рекомендую множество вложенных условий формировать по уровням,как это делается на ЯВУ (языках высокого уровня).
Иначе, большая вероятность, потерять скобку.
Т.е. простейший IF для строк (с игнорированием регистра букв – ключ /i ) будет:
Для оператора возврата кода ошибки:
Оператор errorlevel 1 – означает что мы сравниваем %errorlevel% с 1. Если код ошибки >= 1, то условие выполняется (true).Для логического сравнения чисел кавычки убираем:
Справка
if /?
EQL – равно (или просто знак == )NEQ – не равноLSS – меньшеLEQ – меньше или равноGTR – большеGEQ – больше или равно,Не забывай, что:= это знак присвоения. Работает только с Set.== это знак сравнения. Работает в операторе IF.Посмотри в коде Рекурсивный Dir /X (под спойлером) на сколько хорошо прослеживается логика вложенных условий.
Примеры команд для bat файлов
Теперь рассмотрим основные команды, которые Вы можете использовать.
Если Вам нужно удалить файл пропишите следующие:
Del d:\file\test.doc
Для того чтобы удалить весь каталог пропишите:
Rd d:\file\
Вдруг Вам нужно удалять каждый раз все из какого-нибудь каталога, то используйте вот что:
Echo Y| del d:\file\
- del d:\file\ — это как раз и есть удаление всех файлов;
- echo Y| — команда подтверждает удаление т.к. если не прописать эту команду, то Вы увидите сообщение о подтверждение удаления – «Продолжить », и Вам нужно будет каждый раз отвечать на этот вопрос.
Сейчас давайте рассмотрим пример посложней, в котором уже выполняется условие:
@echo off
«C:\Program Files\WinRAR\winrar.exe» x -O+ -IBCK d:\test\test.rar d:\test
IF not EXIST d:\test\123.rar GOTO 1
IF EXIST d:\test\123.rar GOTO 2:2
«C:\Program Files\WinRAR\winrar.exe» x -O+ -IBCK d:\test\123.rar c:\
del d:\test\123.rar:1
del d:\test\test.rar
end
Теперь объясняю, допустим, Вам нужно разархивировать архив test.rar, в котором будет много файлов, но если там окажется файл 123.rar его нужно будет разархивировать в корень диска C, а остальные файлы чтобы остались в том же каталоге не тронутыми.
По порядку, команда @echo off нужна, для того чтобы на экране у нас ничего не отражалось (в принципе, если не нужно можете не писать эту строку
). Далее у нас запускается винрар и распаковывает архив test.rar в папку test. Затем идет условие, если в папке test (после распаковки test.rar
) у нас не окажется файла 123.rar, то у нас просто выполнение батника переходит к строке:1 и потом просто удаляется файл test.rar за не надобностью т.к. все что нам нужно мы уже распаковали. Но если там оказывается файл 123.rar, то выполнение батника переходит к строке:2, после которой уже идет распаковка файла 123.rar в корень диска C. Другими словами у нас выполняется условие, если есть файл то делать это, если нет файла, делать вот это. Допустим, если не прописать условие в данном примере, то у нас батник выдаст ошибку, тогда когда у нас не окажется файла 123.rar в данной папке.
А сейчас рассмотрим такой пример, допустим, Вам нужно каждый раз перемещать из каталога расположенного на диске D файлы на флешку. Вы каждый раз должны будете заходить мой компьютер диск D, выбирать нужную папку, выделять все файлы из нее и вырезать, а потом только заходить на флешку и вставлять. С помощью батника это делается в один клик (с одним условием, что флешка каждый раз будет, например диском G или тем какой у Вас
). Вот пример такого батника:
Move «D:\catalog\*.doc» G:\catalognaflehe\
И все файлы с расширением doc, которые находятся в каталоге D:\catalog будут перемещаться на флешку. Теперь хочу сказать, что в батниках можно использовать сценарии (скрипты
) при помощи Windows Scripting Host и если нужно, например чтобы выводилось сообщение, после того как файлы скопированы (предыдущий пример
) вставьте вот это:
Echo var WSHShell = WScript.CreateObject(«WScript.Shell»); > %temp%\mes.js
echo WSHShell.Popup(«Файлы Скопированы»); >> %temp%\mes.js
start %temp%\mes.js
deltree /y %temp%\mes.js
На самом деле про написание батников можно разговаривать много и в одну статью это, конечно же, не уместить, здесь я показал всего лишь принципы, которые используются при написании bat файлов, так сказать основу. Если Вы хотите узнать больше команд для написания батников, Вы можете легко посмотреть их, набрав в командной строке (Пуск — Выполнить – cmd
) команду help, но там, конечно же, не все команды, что можно использовать в батниках. Удачи в написание BAT файлов (батников
).
Чтобы открыть командную строку в нужном месте (в папке с файлами, например), нужно вызвать контекстное меню (ПКМ) с зажатой клавишей Shift
:
О том, как работать с командной строкой вы . Переходим непосредственно к командам.
Список всех команд консоли с описанием можно получить, набрав в консоли help
Справку по любой команде можно получить при помощи ключа /?
Например: DIR /?
выведет справку по всем ключам команды DIR
Создание BAT файла переименованием TXT
Также в Windows 11 и Windows 10 можно создавать BAT файлы с помощью переименования обычных текстовых файлов (с расширением *.txt). Другими словами, вы можете сначала создать обычный текстовый документ с расширением TXT, сохранить в него все нужные команды, и уже потом превратить его в исполняемый пакетный файл изменив расширение с TXT на BAT.
Чтобы воспользоваться этим способом необходимо включить отображение расширений в окне «Параметры папок». В Windows 10 для этого нужно открыть любую папку, перейти на вкладку «Вид» и нажать на кнопку «Параметры».
В Windows 11 для этого нужно открыть любую папку, нажать на кнопку с тремя точками и в открывшемся меню выбрать «Параметры».
Также «Параметры папок» можно открыть с помощью меню «Выполнить». Для этого нужно нажать комбинацию клавиш Win-R и ввести команду «control.exe folders».
Какой бы вы способ не выбрали, перед вами откроется окно «Параметры папок». Здесь нужно перейти на вкладку «Вид» и отключить функцию «Скрывать расширения для зарегистрированных типов».
После этого, при переименовании вы сможете изменять расширение.
Изменив расширение с TXT на BAT вы получите исполняемый пакетный файл.
Цикл for … in … do …
Самый простой вариант синтаксиса команды FOR для командных файлов имеет следующий вид:
Внимание
Перед названием переменной должны стоять именно два знака процента (%%), а не один, как это было при использовании команды FOR непосредственно из командной строки.
Сразу приведем пример. Если в командном файле заданы строки
то в результате его выполнения на экране будет напечатано следующее:
Параметр множество в команде FOR задает одну или более текстовых строк, разделенных запятыми, которые вы хотите обработать с помощью заданной команды. Скобки здесь обязательны. Параметр команда задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается.
на экран будет выведено
Параметр %%переменная представляет подставляемую переменную (счетчик цикла), причем здесь могут использоваться только имена переменных, состоящие из одной буквы. При выполнении команда FOR заменяет подставляемую переменную текстом каждой строки в заданном множестве, пока команда, стоящая после ключевого слова DO, не обработает все такие строки.
Замечание.
Чтобы избежать путаницы с параметрами командного файла %0 — %9, для переменных следует использовать любые символы кроме 0 – 9.
Параметр множество в команде FOR может также представлять одну или несколько групп файлов. Например, чтобы вывести в файл список всех файлов с расширениями txt и prn, находящихся в каталоге C:
При таком использовании команды FOR процесс обработки продолжается, пока не обработаются все файлы (или группы файлов), указанные во множестве.
Как перенаправить результат выполнения команд в файл
Часто, при выполнении сложного bat файла в автоматическом режиме проверить результаты его работы бывает затруднительно по многим причинам. Поэтому проще записывать результаты работы команд batch файла в текстовый файл (лог-файл). а потом анализировать правильность работы bat файла по этому логу.
Перенаправить результат работы команд bat файла в лог-файл достаточно просто. Далее будет показано, как это можно сделать.
Создайте bat-файл следующего содержания (скопируйте эти строки в Блокнот и сохраните файл с расширением bat):
@echo off echo Start %time% echo Create test.txt echo test>C:\test.txt echo Copy Test.txt to Old_test.txt copy C:\test.txt C:\Old_test.txt echo Stop %time%
Первая строка отключает вывод самих команд. Таким образом, в лог-файл будут записаны только результаты их выполнения.
Вторая строка записывает в лог-файл время начала работы пакетного файла.
Третья строка записывает в лог-файл пояснение того, что следующая команда создаст файл test.txt
Команда из четвертой строки создает файл test.txt с корне диска С. Файл создается для примера. Эта команда записывает в файл C:\test.txt слово test
Пятая строка выводит в лог-файл пояснение, что следующая команда выполняет копирование файла из одного места в другое.
Команда в шестой строке копирует созданный файл C:\test.txt в файл C:\Old_test.txt, т.е. создается копия файла под новым именем.
Последняя, седьмая строка содержит команду вывода времени завершения работы пакетного файла. В сумме с записью в лог-файл времени начала работы пакетного файла эти два значения времени дают возможность оценить время работы пакетного файла.
Сохраните этот пакетный файл под именем, например, 1.bat
Предположим, что отчет о работе пакетного файла мы бы хотели хранить в отдельной папке и каждый день записывать отчет с новым именем файла, чтобы была возможность в любой из дней обратиться к логам за предыдущие дни. Причем, имя лог-фала хотелось бы иметь в виде даты работы пакетного файла. Чтобы все это реализовать создадим на диске С (например) папку с именем LOG, т.е. полный путь к ней будет выглядеть C:\LOG. Созданный пакетный файл 1.bat будем запускать следующей командой:
1.bat>C:\LOG\%date~-10%.txt
Если пакетный файл будет запускаться из Планировщика, то нужно указать полный путь с bat-файлу. Помните, что если в пути есть пробелы, то надо использовать либо кавычки, либо формат 8.3. Т.е., если путь к bat-файлу C:\Program Files\1.bat, например, то в командной строке Планировщика для запуска bat-файла нужно указать одну из следующих строк:
"C:\Program Files\1.bat">C:\LOG\%date~-10%.txt C:\Progra~1\1.bat>C:\LOG\%date~-10%.txt
После запуска файла 1.bat в папке C:\LOG будет создан файл с именем, равным дате запуска bat-файла, например, 13.01.2004.txt Это и будет отчет о работе пакетного файла 1.bat
Запуск bat-файла, пример которого показан в первом листинге вверху страницы, указанной выше командой, приведет к созданию лог-файла такого содержания:
Start 19:03:27,20 Create test.txt Copy Test.txt to Old_test.txt Скопировано файлов: 1. Stop 19:03:27,21
Таким образом, для выполнения перенаправления результатов работы bat-файла в лог-файл нужно использовать символ перенаправления > Синтаксис таков:
Путь\ИмяФайла.bat>Путь\ИмяЛогФайла.txt
Расширение лог-файла может быть любым. При желании, отчет о выполнении пакетного задания можно оформить даже в виде страницы html (соответствующие теги могут быть выведены в лог-файл так, как выводились комментарии в примере 1.bat) и скопировать его на корпоративный сервер.
Вызов подпрограмм и других скриптов
Очередная контринтуитивная фича bat-файлов в том, что, если из одного bat-файла вызвать другой, выполнение первого файла не продолжится, если только не использовать ключевое слово call. То есть, мы должны разбираться, чем является команда, которую мы хотим вызвать. Если это bat-файл, то надо перед его именем написать call. Если это exe-файл или встроенная команда, то это слово не нужно. Кроме того, если вызываемый скрипт использует команду , то выполнение также не вернется к нам. Чтобы завершить только текущий скрипт, надо писать .
При вызове одного скрипта из другого не создается новый процесс. Поэтому переменные окружения, установленные вызванным скриптом, видны вызывающему.
В следующем примере вызывает . Этот пример также демонстрирует работу с кодом завершения процесса.
a.bat
b.bat
Выводит:
Командой также можно вызвать код, находящийся в том же файле:
Работает аналогично предыдущему примеру, но это один файл.
С двоеточия начинаются метки. На них можно переходить командами и . В языке bat-файлов нет понятия подпрограммы. Мы будем так называть код, который вызывается через и возвращает управление через или . Метка :eof не определена, и это не ошибка. Эта метка не нуждается в определении. Она всегда означает конец файла. Т.е. переход на :eof – это выход – то же, что и , но без кода завершения.
Основные команды, синтаксис и примеры использования батников
Как сделать bat-файл вы знаете, теперь настала пора самого интересного, а именно синтаксиса языка интерпретатора CMD. Понятно, пустой батник работать не будет, он даже не запустится при двойном по нему клике. Чтобы скрипт сработал, в нём должна быть прописана хотя бы одна команда. Для наглядного примера посмотрим, как написать bat-файл для запуска программ. Допустим, приступая к работе, вы каждый раз запускаете три программы – Chrome, Firefox и VLC. Упростим задачу, создав скрипт, который будет сам запускать эти программы с интервалом в пять секунд.
Открываем пустой батник и вставляем в него такие команды:
start "" "C:/Program Files/Google/Chrome/Application/chrome.exe" timeout /t 05 start "" "C:/Program Files/Mozilla Firefox/firefox.exe" timeout /t 05 start "" "C:/Program Files/VideoLAN/VLC/vlc.exe"
Команда start запускает исполняемый файл нужной программы, а команда timeout /t задаёт интервал между запусками
Обратите внимание на расположение кавычек – в них берутся пути, в которых имеются пробелы. Также если в пути есть кириллические символы, в начало скрипта следует вставить изменяющую кодировку команду chcp 1251, в противном случае интерпретатор не сможет правильно прочитать путь
При запуске скрипта будет последовательно открыто четыре окна консоли, это нормальное явление, по выполнении команд все они автоматически закроются, впрочем, можно сделать так, чтобы открывалось только первое окно. Для этого код запуска приложения следует изменить следующим образом:
start /b "" "путь"
Может также статься, что в определённый момент потребуется приостановить выполнение скрипта, чтобы пользователь сам смог решить, выполнять ли все остальные команды или нет. Для этого существует команда pause. Попробуйте заменить ею timeout и увидите, что получится.
start /b "" "путь" pause
Рассмотрим ещё один пример команд для bat файла. Напишем скрипт, который будет в одном случае выключать компьютер, а в другом – перезагружать его. Для этих целей мы будем использовать команду shutdown с параметрами /s, /r и /t. При желании можно добавить в батник запрос на выполнение действия, вот так:
@echo off chcp 1251 echo "Вы действительно хотите выключить компьютер?" pause shutdown /s /t 0
Поясняем. Первая команда скрывает текст самих команд, вторая – устанавливает кириллическую кодировку, третья – выводит сообщение для пользователя, четвертая – устанавливает паузу, пятая – выключает, а с ключом /r вместо /s перезагружает компьютер без традиционной задержки в одну минуту. Если не желаете церемониться с запросами и паузами, можете оставить только пятую команду.
Если вместо русского текста при выполнении команды вы увидите крякозябры, попробуйте преобразовать файл скрипта в ANSI.
Что ещё можно делать с помощью скриптов? Много чего, например, удалять, копировать или перемещать файлы. Допустим, у вас есть некая папка data в корне диска D, содержимое которой нужно очистить одним махом. Открываем батник и вставляем в него такую команду:
del /A /F /Q "D:/data"
А можно и так:
forfiles /p "D:/data" /s /m *.* /c "cmd /c Del @path"
В отличие от первой, вторая команда удаляет файлы рекурсивно, то есть в папке data будут удалены все файлы плюс те, которые лежат во вложенных каталогах.
А вот ещё один полезный пример. Напишем скрипт, который будет создавать резервную копию содержимого одной папки и сохранять данные в другую. За копирование отвечает команда robocopy:
robocopy C:/data D:/backup /e pause
Запустив такой батник на исполнение, вы скопируете все содержимое папки data в папку backup, включая вложенные каталоги, пустые и с файлами. К слову, команда robocopy имеет много параметров, позволяющих очень гибко настраивать параметры копирования.
Часть третья. Резервное копирование при помощи батников
Резервное копирование данных — полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.
Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.). В этом случае текст будет следующим
@echo off chcp 1251 xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*»
Где D:\diplom\ — папка расположения всех материалов к диплому, а E:\backup\diplom\ — конечная директория резервной копии. Создаём батник, кидаем его в автозагрузку (пуск — все программы — автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид
@echo off chcp 1251 del «E:\backup\diplom_old\» /s /q rmdir «E:\backup\diplom_old\» /s /q rename «E:\backup\diplom\» «diplom_old» xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*»
del удаляет ранее созданную вторую рк. rmdir переименовывает первую рк во вторую. xcopy создаёт новую рк. Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее
@echo off chcp 1251 xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*» /E /F /H /R /K /Y /D
Создание бэкапа в архиве
Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе — это бэкапы в архиве Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив. Нам необходимо в автозагрузку положить батник со следующим содержимым
@echo off chcp 1251 c:\PROGRA~1\WinRAR\WinRAR.exe a -o+ -agDD-MMM-YY–HH-MM-SS «E:\backup\» «D:\diplom\»
Архив папки D:\diplom будет создаваться в E:\backup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53
к содержанию
Часть вторая. Синтаксис при написании bat-файлов
- Каждая команда вводится с новой строчки;
- Все команды выполняются последовательно за исключением тех случаев, когда внутри самого батника присутствует переход к определённой его части;
- Комментарии в пакетный файл могут быть добавлены двумя способами:
— либо после двух двоеточий ::переход к части копирования — либо при помощи команды goto, т.е. вводится команда goto, потом место для перехода, а между ними сам комментарийgoto begin ---------------------------------------- Это батник служит для резервного копирования дипломной работы ---------------------------------------- begin
- Если команду необходимо ввести с атрибутом, то сначала вводим команду, затем пробел, слэш и, собственно, сам ключ copy /Y Чтобы посмотреть список возможных атрибутов к конкретной команде, нужно в командной строке ввести команду, затем пробел, слэш и знак вопроса dir /?
- Для скрытия окна терминала выполняемой команды можно в начале строки поставить знак собачки @, если же требуется скрыть отображение выполнения всех команд, то проще (чтобы не ставить собачку в каждой строчке) в начале батника указать @echo off здесь команда echo off скрывает окна, а собачка впереди неё запрещает отображение выполнения самой echo off
- Все директории внутри команд, для исключения возможных ошибок, будем вводить в кавычках;
- По умолчанию при работе с кириллическим текстом на выходе вы можете получить иероглифы, при работе с папками/файлами, имеющими русские имена, вообще может ничего не получиться, это происходит из-за используемых кодировок, поэтому для исключения подобных неприятностей в начале пакетного файла будем указывать кодировку, корректно работающую с кириллицей следующей командой chcp 1251
- Есть команды (например, удаление файлов, форматирование), которые могут потребовать подтверждения действий. Порой это бывает очень нежелательно, в таком случае, можно вписать ответ заранее в сам пакетный файл. Ответ записывается ДО! команды и отделяется от неё вертикальной чертой |Y|del
- В командной строке (а значит и в пакетных файлах) при указании директории иногда бывает удобнее пользоваться переменными, нежели прописывать весь путь cd %APPDATA%