Работа с bat-файлами
ТЕОРИЯ 1
Для работы с bat-файлами для удобства будем использовать программу FAR.
Небольшое отступление. Те, кому FAR использовать ну совсем не хочется, могут воспользоваться командной строкой Windows: Пуск->Выполнить-> ввести команду cmd Перед вами появится командное окно — эмулятор системы MS DOS.
Для тех, кому работать с GUI[1] приятнее запускает программу FAR Manager.
Основные команды в FAR’e:
Alt+F1 (F2) — выбрать диск в левой (правой) панели
Вверх/вниз — перемещение по дереву каталогов
F7 — создать каталог
Shift+F4 — создать файл
F4 — редактировать выделенный файл (F8 – для смены кодировки)
F3 — просмотр выделенного файла (F8 – для смены кодировки)
Enter — зависит от того, где установлен курсов и введена ли команда внизу экрана. Если введена команда — она будет выполнена. Если курсор установлен на имени каталога — мы "зайдем" в каталог. Если на ".." — "поднимемся" на каталог выше. Если курсор стоит на имени файла — результат нажатия Enter’a будет аналогичен двойному щелчку мыши в "Проводнике".
Ctrl+O показать экран с результатами команд.
Ctrl+вверх/вниз — показать область ввода команд (удобно для отладки)
Для изучения bat-файлов будет полезно знать:
· для перенаправления потока вывода используется символ ">".
Пример: пусть в вашем файле выполняется команда echo. Тогда она выведет какой-то текст на экран. Если вам хочется, чтобы все результаты работы вашего bat-файла выводились не на экран, а в файл — наберите в командной строке что-нибудь вида "c:> mybatfile. bat > myoutput. txt". Тогда результаты работы вашего файла mybatfile. bat, находящегося в корне диска c: будут записаны в файл myoutput. txt в том же каталоге.
· Для создания bat-файла можно использовать программу FAR (или аналогичные ей: VC — Volcov Commaner, TC — Total Commander, WinCom — Windows Commander), или использовать встроенную программу "Блокнот" (Notepad). Важно: при сохранения файле в Блокноте нужно указать в поле "Тип файла" не ".txt Текстовые файлы", а ".* Все файлы" и написать полное имя, например, mybatfile. bat. Тогда расширением файла будет именно. bat, а не. txt — расширение по умолчанию.
УПРАЖНЕНИЯ 1 (echo, cls, dir, del, %1)
1. Создаем bat-файл с таким содержимым:
echo "Hello from Politeh!"
Сохраняем файл, запускаем и проверяем, что он работает.
2. Изучаем способ вызова справки по необходимым командам:
<имя_команды> /?
for /? — будет выведена справка по команде for
Задание №1: изучить справку команды mkdir и сделать bat-файл (можно просто дополнить первый файл), который будет создавать заданную директорию.
Задание №2: вывести справку по командам for и if в файлы for_help. txt и if_help. txt соответственно. Как это сделать? Читаем "полезное знание №1" 🙂
Примечание: когда откроете файл for_help. txt – скорее всего, увидите «кракозябру». Её можно прочитать тремя способами (точнее изменить кодировку с Windows-1251 на CP‑866):
1. открыть файл в Word, он, обычно, автоматически предлагает правильную кодировку
2. открыть файл в FAR (нажав F4), после этого изменив кодировку по команде Shoift+F8
3. открыть блокнотом и изменить шрифт на Terminal.
3. Изучаем команды cls, echo, dir, del. Для этого используем эти команды в собственном bat-файле и убеждаемся, что фактические результаты совпадают с ожидаемыми.
4. Изучаем возможность работы с аргументами: если внутри bat-файла использовать комбинации символов %0, %1,…, %9, то можно получить значения аргументов, переданных системному обработчику вместе с вашим bat-файлом.
Задание №1: создать bat-файл, который должен будет запускаться с двумя параметрами (например, так: mybat. bat 1 22) и выводить такой текст:
parameter1 = 1
parameter2 = 22
где 1 и 22 — это параметры запуска вашего bat-файла.
Задание №2: изменить созданный файл так, чтобы в случае, когда первый параметр — это строка test, выдавалось сообщение "First parameter — <test>!" Для решения задачи используем команду if.
Задание №3. Классика жанра. Написать bat-файл, который удаляет файл, путь к которому задан в виде первого аргумента. Обязательно нужно проверить, существует ли файл с заданным путем или нет (с помощью if exist).
УПРАЖНЕНИЯ 2 (dir, for, goto, path)
Как вывести файлы в каталоге:
«Дешево, надежно и практично»: команда dir Команда for в простом варианте:
FOR %%F IN (*.*) DO ECHO %%F
Все файлы будут выведены друг за другом Чуть более красивый вариант с командой for:
for %%i in (*) do (
echo %%i
echo ——
)
Будут выведены все файлы, причем с разделителями.
Важно: в этом примере показано, как записывать команды не в одну строчку – с использованием обрамляющих круглых скобок. Команда for может использоваться не только для работы с файлами, но и для работы с числами.
В справке по команде for написано:
FOR /L %переменная IN (начало, шаг, конец) DO команда [параметры]
Набор раскрывается в последовательность чисел с заданными началом, концом
и шагом приращения. Так, набор (1,1,5) раскрывается в (1 2 3 4 5),
а набор (5,-1,1) заменяется на (5 4 3 2 1)
Пример:
@echo off
FOR /L %%f IN (1,1,10) DO echo %%f
Такой файл выведет последовательность чисел от 1 до 10 включительно.
Метки в bat-файлах
Метки позволяют переходить от одной команды к другой практически в производном порядке. Так же, как и в большинстве языков программирования, метки задаются словом goto.
Пример:
@echo off
if %1==odin goto odin
if %1==dva goto dva
goto end
:odin
echo Odin!!
goto end
:dva
echo Dva!!
goto end
:end
echo End of example
Как тестируем? Правильно: например, mybat. bat odin – должны увидеть радостные возгласы на тему первого параметра J
Переменная path
Очень полезно знать, что прописано в эту переменную, когда вы будете устанавливать какую-нибудь программу типа Visual Studio и т. п. или когда какая-нибудь программа будет писать, что она не может найти какие-нибудь пути.
Как посмотреть, в какие каталоги смотрит Windows, когда ищет файлы: набираем
set path > path.txt и смотрим, что записалось в файл path. txt.
Любознательные могут сравнить значения каталогов с тем, что указано в строке Свойства Системы-> Дополнительно -> Переменные среды.
УПРАЖНЕНИЯ 3 (cmd, del, 8.3, call, set, формулы)
1. Как запустить bat-файл без FAR’a? Пуск->Выполнить‑>"cmd". А дальше используем команды "dir", "cd" и др.
2. Пишем bat-файл удаления другого файла
Вызов: my. bat temp. doc
Схема bat-файла (пишем в несколько строчек!):
if not exist <имя_файла>
echo Нет файла <имя_файла>
else
del <имя_файла>
3. Усложняем: делаем удаление файла с именем больше 8 символов (слушаем про "требование 8.3 для DOS").
4. Пишем bat-файл копирования заданного файла в параллельный каталог Backup (изучаем команды "cd.." , "cd..backup" , "copy myfile. zip ..backup")
5. Передаем переменные между двумя bat-файлами — изучаем команду set
a. Пишем главный файл — main. bat:
call f1.bat mystring
call f2.bat
b. Пишем файл f1.bat
set AAA=%1
echo Новая переменная =%AAA%
c. Пишем файл f2.bat
echo Знаем переменную AAA: %AAA%
d. Добиваемся работоспособности. Для удобства вставляем "@echo off" в начало каждого файла
6. Пишем bat-файл удаления всех файлов в текущем каталоге. Вспоминаем про важное замечание с прошлого занятия.
7. В параллельном каталоге Backup создаем каталог с текущей датой и копируем туда все файлы с расширением "bat" в этот каталог. Если каталога backup нет — создаем его.
[1] GUI = Graphical User Interface — Графический Интерфейс Пользователя — в противоположность текстовому интерфейсу командной строки