Bat-файли Windows є зручним способом виконання різних завдань на ПК, яким активно користуються комп'ютерні умільці. Вони дозволяють автоматизувати повсякденні завдання, скоротити час їх виконання і перетворити складний процес на щось посильне пересічному користувачеві. У цій статті представлені базові можливості командних файлів та рекомендації щодо самостійного їх написання.
Автоматизація – це просто
Як створити bat-файл? Для цього необхідно виконати такі дії:
- У будь-якому текстовому редакторі, наприклад, Notepad або WordPad, створити текстовий документ.
- Записати свої команди, починаючи з @echo , а потім (щоразу в новому рядку) - title [назва пакетного скрипта], echo [повідомлення, яке буде виведено на екран] і pause.
- Зберегти текст в електронному документі з розширенням .bat (наприклад, test.bat).
- Для запуску слід двічі клацнути по створеному пакетному файлу.
- Щоб його відредагувати, необхідно клацнути на ньому правою кнопкою миші та з контекстного меню вибрати пункт «Змінити».
Необроблений файл виглядатиме приблизно так:
title Це ваш перший скрипт bat-файлу!
echo Ласкаво просимо до сценарію пакетної обробки!
Більш детально про команди bat-файлів та їх використання йтиметься нижче.
Крок 1: створення програмного скрипту
Припустимо, що у користувача часто виникають проблеми з мережею. Він постійно користується командним рядком, набираючи ipconfig і пінгу Google для усунення несправностей в Мережі. Через деякий час користувач розуміє, що було набагато ефективніше, якби він написав простий bat-файл, записав його на свій USB-накопичувач і запускав його на комп'ютерах, які він діагностує.
Створення нового текстового документа
Пакетний файл спрощує виконання на комп'ютері повторюваних завдань за допомогою командного рядка Windows. Нижче наведено приклад скрипта, який відповідає за відображення на екрані деякого тексту. Перед тим, як створити bat-файл, слід клацнути правою кнопкою миші на порожньому місці в каталозі і вибрати пункт "Створити", а потім "Текстовий документ".
Додавання коду
Подвійне клацання на цьому новому текстовому документі відкриє прийнятий за промовчанням текстовий редактор. Можна скопіювати та вставити наведений вище приклад коду у текстовий запис.
Збереження
Вищезгаданий скрипт виводить на екран текст «Ласкаво просимо до сценарію пакетної обробки!». Електронний документ необхідно записати, вибравши пункт меню текстового редактора "Файл", "Зберегти як", а потім вказати бажане ім'я bat-файлу. Його слід завершити розширенням.bat (наприклад welcome.bat) і натиснути «ОК». Для правильного відображення кирилиці в деяких випадках слід переконатися у правильному виборі кодування. Наприклад, при використанні консолі русифікованої системи Windows NT документ необхідно зберегти у CP866. Тепер потрібно двічі клацнути на ярлику bat-файлу, щоб активувати його.
Але на екрані з'явиться напис:
"Ласкаво просимо до сценарію пакетної обробки! Для продовження натисніть будь-яку клавішу..."
Якщо bat-файл не запускається, користувачі рекомендують зайти в регістр і видалити ключ:
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.BAT\UserChoice".
Не варто думати, що це все, на що здатні сценарії пакетної обробки. Параметрами скриптів є змінені версії команд командного рядка, тому користувач обмежений лише їх можливостями. А вони досить великі.
Крок 2: знайомство з деякими командами
Якщо користувач ПК знайомий з тим, як слід виконувати команди консолі DOS, то він буде майстром створення програмних скриптів, тому що це та сама мова. Рядки в bat-файлах повідомлять інтерпретатору cmd.exe все, що потрібно. Це економить час та сили. Крім того, є можливість задати деяку логіку (наприклад, прості цикли, умовні розпорядження тощо, які концептуально схожі на процедурне програмування).
Вбудовані команди
1. @echo - це команда bat-файлів, яка дозволить побачити роботу скрипта у командному рядку. Вона використовується для перегляду виконання робочого коду. Якщо у пакетного файлу виникають проблеми, то дана команда дозволить швидко локалізувати проблеми. Додавання off дозволяє швидко завершити виконання коду, уникаючи виведення непотрібної інформації на екран.
2. Title надає ті ж можливості, що й тег
3. Call викликає один bat-файл із іншого або підпрограму всередині одного сценарію. Наприклад, функція power обчислює ступінь %2 числа %1:
if %counter% gtr 1 (
set /a counter-=1
endlocal & set result=%prod%
4. Cls очищає командний рядок. Використовується для того, щоб попередній висновок стороннього коду завадив перегляду ходу виконання поточного скрипту.
5. Color задає колір шрифту та фону. Наприклад, команда color f9 задає білі літери на блакитному тлі. Команда без параметра відновлює стандартні установки.
6. Echo служить виведення інформації, і навіть включення (echo on) чи виключення (echo off) такого вывода. Наприклад, команда Echo. виводить новий рядок без крапки, а echo . - Точку. Без параметрів команда виводить на екран інформацію про свій статус - echo on або echo off.
7. Rem забезпечує ту ж функціональність, що й тег
8. Pause дозволяє перервати виконання команд bat-файлу. Це дозволяє прочитати виконані рядки перед продовженням програми. При цьому на екрані відображається повідомлення «Для продовження натисніть будь-яку клавішу...».
9. Set дозволяє переглянути або встановити змінні оточення. З ключем /p команда запитує користувача введення і зберігає його. З параметром /а вона дає можливість виконувати прості арифметичні операції, також привласнюючи результат змінної. При операціях з рядками не повинно бути прогалин ні до, ні після знаку рівності. Наприклад, команда set виводить на дисплей перелік змінних оточення, set HOME - значення аргументів, що починаються з “HOME”, а set /p input=введіть ціле: запитує введення цілого числа і надає його відповідної змінної.
10. Start "" [веб-сайт] запустить заданий веб-сайт у веб-браузері, який використовується за замовчуванням.
11. If служить для перевірки певної умови. Якщо воно істинно, то виконується наступна команда. Умови бувають 3 видів:
- ERRORLEVEL - перевірка коду завершення останньої виконаної інструкції на відповідність або перевищення зазначеного числа. При цьому 0 позначає успішне виконання завдання, а будь-яке інше число зазвичай позитивне, повідомляє про помилку. Наприклад, можна використовувати вкладені команди для точного визначення коду завершення: if errorlevel 3 if not errorlevel 4 echo сталася помилка №3.
- Рядок1 == рядок2 - перевірка збігу двох рядків. Наприклад, за відсутності зовнішнього параметра команда if "%1"= ="" goto ERROR передасть керування міткою ERROR.
- EXIST ім'я – перевірка існування файлу із зазначеним ім'ям. Наприклад, якщо не існує A:\program.exe COPY C:\PROJECTS\program.exe A: копіює програму program.exe на диск А, якщо її там немає.
12. Else повинна бути в одному рядку з командою If. Вказує на необхідність виконання наступної інструкції, якщо вираз виявиться хибним.
13. For використовується для повторення певних дій із кожним членом списку. Має формат для %%аргумент in (список) do команда. Аргументом може бути будь-яка буква від A до Z. Список являє собою послідовність рядків, розділених пробілами або комами. Підстановочні знаки також можна використовувати. Наприклад:
- for %%d in (A, C, D) do DIR %%d - виводить послідовно на екран директорії дисків А, С і D;
- for %%f in (*.TXT *.BAT *.DOC) do TYPE %%f - друкує вміст усіх .txt-, .bat- та .doc-файлів у поточній директорії;
- for %%P in (%PATH%) if exist %%P\*.BAT COPY %%P\*.BAT C:\ВАТ - копіює всі пакетні файли, які існують у всіх каталогах маршруту пошуку в папку С:\ ВАТ.
14. Двокрапка (:) перед словом утворює посилання, яка дозволяє пропускати частину програмного коду або повертатися назад. Використовується з командами Call та Goto, вказуючи, з якого місця слід продовжувати виконання bat-файлу, наприклад, при виконанні певної умови:
15. Змінні:
- %%a означає кожен файл у папці;
- %CD% – поточна директорія;
- %DATE% – системна дата, формат якої залежить від локалізації;
- %TIME% - системний час як ЧЧ:ММ:СС.мм.;
- %RANDOM% - згенероване псевдовипадкове число в діапазоні від 0 до 32767;
- %ERRORLEVEL% - код завершення, який повертається останньою виконаною командою або bat-скриптом.
Витягти частину рядка, що міститься в змінній, за відомого її положення та довжини можна так:
%[змінна]:~[початок],[довжина]%. Наприклад, показати дату у форматі ДД/ММ/РРРР як РРРР-ММ-ДД можна так: echo %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.
16. (".") - коренева папка. Під час роботи з консоллю перед зміною імені файлу, його видаленням і т. д. необхідно направити дію команди до конкретного каталогу. При використанні пакетного файлу достатньо запустити його у будь-якому потрібному каталозі.
17. %цифра - приймає значення параметрів, що передаються користувачем у bat-файл. Можуть розділятися пробілами, комами або двокрапками. "Цифра" є числом від 0 до 9. Наприклад, %0 приймає значення поточної команди. %1 відповідає першому параметру і т.д.
18. Shift – команда, яка використовується для зміщення вхідних параметрів на одну позицію. Застосовується, коли пакетному файлу надсилаються зовнішні аргументи. Наприклад, наступний bat-файл копіює на диск D файли, задані як параметри командного рядка:
if not (%1)==() goto next
Крім того, з аргументами можна проводити такі маніпуляції:
- %~ - видалити навколишні лапки;
- %~f - розширити параметр до повного імені шляху разом із ім'ям диска;
- %~d – показати ім'я диска;
- %~p - відобразити лише шлях;
- %~n - виділити з параметра лише ім'я файлу;
- %~x - залишити лише розширення;
- %~s - перетворити шлях у виставу з короткими іменами;
- %~a - отримати атрибути файлу;
- %~t - вивести дату та час створення;
- %~z – відобразити розмір файлу;
- %~$PATH: - здійснює пошук в директоріях, перерахованих у змінній оточенні PATH, і розширює параметр до першого знайденого відповідного повного імені або видає порожній рядок у разі невдачі.
Підстановочні знаки
Багато команд приймають шаблони імен файлів - знаків, які дозволяють встановити відповідність до групи імен файлів. До підстановочних знаків відносяться:
- * (зірочка) - позначає будь-яку послідовність символів;
- ? (знак питання) – замінює один (або 0) знак, відмінний від точки (.).
Наприклад, команда dir *.txt виводить список txt-файлів, а dir ???.txt – перелік текстових документів, довжина імені яких не перевищує 3 букв.
Функції
Як і підпрограми, вони емулюються за допомогою команд call, setlocal, endlocal та міток. Наступний приклад демонструє можливість визначення змінної, в якій зберігається результат, у рядку виклику:
call:say result=world
Обчислення
У bat-файлах можна виконувати прості арифметичні операції з цілими 32-бітовими числами та бітами за допомогою команди set/a. Максимальним числом, що підтримується, є 2^31-1 = 2147483647, а мінімальним - -(2^31) = -2147483648. Синтаксис нагадує мову програмування Сі. До арифметичних операторів відносяться: *, /, %, +, -. У bat-файлі % (залишок цілого розподілу) повинен вводитися як "%%".
Оператори з двійковими числами інтерпретують число як 32-бітову послідовність. До них відносяться: ~ (побітове НЕ або доповнення), & (І), | (АБО), ^ (що виключає АБО),<< (сдвиг влево), >> (зсув праворуч). Логічним оператором заперечення є! (знак оклику). Він змінює 0 в 1 і ненульове значення в 0. Оператором комбінування служить (кома), яка дозволяє проводити більше операцій в одній команді set. Комбіновані оператори присвоєння += і -= у виразах a+=b і a-=і відповідають виразам a=a+b та a=a-b. Також працюють і *=, %=, /=, &=, |=, ^=, >>=,<<=. Приоритет операторов следующий:
(); %+-*/; >>, <<; &; ^; |; =, %=, *=, /=, +=, -=, &=, ^=, |=, <<=, >>=; ,
Літерали можна вводити у вигляді десяткових, шістнадцяткових (з провідними 0x) та вісімкових чисел (з провідним нулем). Наприклад, set /a n1=0xffff надає n1 шістнадцяткове значення.
Зовнішні команди
- Exit використовується для виходу з консолі DOS або (з опцією /b) лише поточного bat-файлу чи підпрограми.
- Ipconfig – це класична консольна команда, яка виводить інформацію про мережу. Вона включає MAC- та IP-адреси, і маски підмережі.
- Ping пінгує IP-адресу, відправляючи до неї пакети даних, щоб оцінити його віддаленість та час очікування (відгуку). Також використовується для завдання паузи. Наприклад, команда ping 127.0.01 -n 6 зупиняє виконання коду на 5 с.
Бібліотека команд bat-файлів величезна. На щастя, в Мережі є безліч сторінок, в яких вони перераховані, поряд зі змінними пакетного скрипта.
Крок 3: запис та запуск bat-файлу
Наступний скрипт набагато спростить щоденну онлайн-активність. Що робити, якщо є бажання миттєво відкрити всі улюблені новинні сайти? Оскільки скрипти використовують команди консолі, то можна створити сценарій, який відкриває кожну стрічку новин в одному вікні браузера.
Далі слід повторити процес створення bat-файлу, розпочавши з порожнього текстового документа. Для цього необхідно клацнути правою кнопкою миші на порожньому місці в будь-якій папці та вибрати пункт "Створити", а потім - "Текстовий документ". Після відкриття файлу потрібно ввести наступний скрипт, який запускає основні російськомовні засоби масової інформації, доступні в Інтернеті:
start "" http://fb.ru
start "" http://www.novayagazeta.ru
start "" http://echo.msk.ru
start "" http://www.kommersant.ru
start "" http://www.ng.ru
start "" http://meduza.io
start "" https://news.google.com/news/?ned=ru_ua&hl=ua
Цей скрипт містить команди start “”, які відкривають декілька вкладок. Можна замінити запропоновані посилання будь-якими іншими на вибір. Після введення скрипта слід зайти в меню редактора «Файл», а потім у «Зберегти як...» і записати документ з розширенням.bat, змінивши параметр «Тип файлу» на «Всі файли» (*. *).
Після збереження для запуску скрипта достатньо двічі натиснути на ньому. Веб-сторінки миттєво завантажуватимуться. За бажанням можна розмістити файл на своєму робочому столі. Це дозволить отримати миттєвий доступ до всіх улюблених сайтів.
Організатор
Якщо завантажувати по кілька файлів на день, то незабаром у папці «Завантаження» їх накопичаться сотні. Можна створити скрипт, який упорядкує їх на кшталт. Достатньо помістити.bat-файл із програмою в папку з неорганізованими даними та двічі клацнути для запуску:
rem Кожен файл у папці
для %%a in (".\*") do (
rem перевірити наявність розширення та неприналежність до цього скрипту
if "%%~xa" NEQ "" if "%%~dpxa" NEQ "%~dpx0" (
rem перевірити наявність папки для кожного розширення, і якщо її немає, створити
if not exist "%%~xa" mkdir "%%~xa"
rem перемістити файл до папки
move "%%a" "%%~dpa%%~xa\"
У результаті файли в директорії "Завантаження" сортуються за папками, назви яких відповідають їх розширенню. Це так просто. Цей пакетний скрипт працює з будь-яким типом даних, будь то документ, відео або аудіо. Навіть якщо ПК не підтримує їх, сценарій все одно створить папку з відповідною міткою. Якщо вже є каталог JPG або PNG, програма просто перемістить туди файли з даним розширенням.
Це проста демонстрація того, що здатні пакетні скрипти. Якщо якесь нескладне завдання необхідно виконувати знову і знову, чи це впорядкування файлів, відкриття декількох веб-сторінок, масове перейменування або створення копій важливих документів, пакетний сценарій допоможе виконати втомливу роботу за кілька кліків.
У цій статті розглянемо два способи створення bat-файлу: за допомогою Провідника та за допомогою Блокноту. Цього буде достатньо, щоб створювати нові bat-файли, але спершу визначимося, для чого вони потрібні. Якщо дуже просто, то bat-файл потрібен для того, щоб один раз записати набір команд командного рядка Windows, а потім виконувати їх у будь-який час не набираючи кожного разу. Загалом, ідеальний варіант для лінивих та/або системних адміністраторів. =)
Відразу перейду до справи:
Спосіб перший. Створюємо bat-файлв « Провіднику»
Відразу зазначу, що для цього способу потрібно, щоб було увімкнено відображення розширення файлів у «Провіднику». Це зручно в багатьох випадках і я не розумію, чому за замовчуванням ця фішка вимкнена у Windows.
Змінюємо його розширення(те, що після останньої точки) на.bat:
Після того, як натиснемо Enter, Windows поцікавиться «Після зміни розширення цей файл може виявитися недоступним. Виконати зміну?». Ну звісно «Так»! Саме цього ми і домагаємося: змінити розширення.
Вуаль! Ми здобули «батник», тобто. виконуваний файл, в який можна вписати команди, які виконуватимуться при його запуску:
Спосіб другий. Створюємо bat-файлв « Блокноті»
Щоб створити bat-файл за допомогою « Блокнота», потрібно відкрити «Блокнот»(або будь-який текстовий файл у «Блокноті») та скористатися меню « Файл», Опція «»:
Відкриється вікно збереження файлу. Тут важливо врахувати 2 речі:
- « Тип файлу» має бути виставлений на Усі файли (*.*)
- « ім'я файлу» повинно мати розширення.
Дивимося, куди зберігаємо (щоб потім знайти) і тиснемо кнопку « Зберегти»:
Разом:
Будь-який з цих способів має сенс, якщо є права адміністратора. Але перший вимагає додаткових налаштувань (які я рекомендую все-таки змінити та застосувати).
Міністерство освіти Російської Федерації
РОБОТА З ПАКЕТНИМИ ФАЙЛАМИ
У СЕРЕДОВИЩІWINDOWS
за курсом «Операційні системи»
для студентів спеціальності 220200
денної форми навчання
Схвалено
редакційно-видавничою радою
Саратовського державного
технічного університету
Саратов 2010
РОБОТА З ПАКЕТНИМИ ФАЙЛАМИ
У СЕРЕДОВІ WINDOWS
Методичні вказівки до лабораторної роботи
за курсом «Операційні системи»
Рецензент О.Ф. Різьбярів
Редактор О.А. Паніна
Ліцензія ВД № 06268 від 14.11.01
Підписано до друку 27.10.10 Формат 60х84 1/16
Саратовський державний технічний університет
410054 м. Саратов, вул. Політехнічна, 77
Вступ
У методичних вказівках розглядаються структура пакетних файлів, методика створення цих файлів, методи автоматизації виконання кількох операцій.
Методичні вказівки містять опис інтерпретатора команд, структури пакетних файлів, опис функцій, які у командних файлах, приклади рішень навчальної завдання, завдання до виконання лабораторної роботи, вимоги до оформлення звіту з лабораторної роботі, і навіть список літератури, яка потрібна на виконання даної лабораторної роботи.
Методичні вказівки призначені для студентів спеціальності 220200, а також можуть бути використані студентами інших спеціальностей, пов'язаних із розробкою системних програм.
Мета роботи: створення пакетних файлів, автоматизація виконання кількох завдань під час встановлення та завантаження Windows, оптимізація та підвищення надійності функціонування системи.
Інтерпретатор команд та пакетні файли
Пакетний файл (англ. batch file) - текстовий файл у MS-DOS, OS/2 або Windows, що містить послідовність команд, призначених для виконання командним інтерпретатором. Після запуску пакетного файлу, програма - інтерпретатор (зазвичай COMMAND.COM або CMD.EXE) читає його рядок за рядком і послідовно виконує команди.
У Windows використовується два інтерпретатори команд commad.com і cmd.exe, які можна запустити через меню "Пуск" (Пуск-> Виконати-> cmd -> ОК або Пуск-> Виконати-> commad -> ОК). На рис. 1 показано можливість використання довідки за командами DOS/Windows. Довідка стає доступною при наборі команди help у командному рядку.
Інтерпретатор команд commad.com
На рис. 2 показано можливість створення нового файлу за допомогою команди copy con имя_файла.расширение.
Р іс.2. Інтерпретатор команд cmd.exe
Використання пакетних файлів (*.cmd або *.bat) допомагає автоматизувати виконання кількох завдань під час інсталяції та завантаження Windows. При цьому жодного втручання користувача не потрібне. Ці файли можуть бути виконані з cmdlines.txt, svcpack.inf, RunOnceEx розділу в реєстрі, або з секції у файлі winnt.sif.
Пакетні файли підтримують усі команди, які можуть бути виконані з командного рядка. Щоб побачити командний рядок, достатньо виконати наступне: Пуск->Виконати->cmd->ОК
Розглянемо найпростіший пакетний файл. Для цього необхідно відкрити Блокнот та набрати в ньому наступний текст:
TITLE Batch File Testing
ECHO Hello World
ECHO Starting Notepad
START notepad
ECHO. ECHO Starting Wordpad
START Wordpad
ECHO.
EXIT
Потім потрібно зберегти файл із будь-яким ім'ям і в будь-якому місці, але з розширенням *.cmd (а не .txt, яке Блокнот надасть за умовчанням). При запуску цього файлу він призначить вікно ім'я Batch File Testing, запустить Блокнот і WordPad, попросить натиснути будь-яку клавішу для продовження роботи і закриє вікно.
Таблиця 1
Значення команд, використаних у пакетному файлі
@echo off |
Приховує рядок C:\> і всі команди, які використовуються у пакетному файлі |
Створює пробіл між рядками |
|
echo message |
Відображає повідомлення у вікні виключно з інформаційними цілями |
Назва вікна |
|
Запускає програму або настановний процес |
|
Відображає повідомлення "Press any key to continue..." ("Натисніть будь-яку клавішу, щоб продовжити...") |
|
Закриває командний рядок |
При додаванні програми для автоматичної установки з інсталяційного диска XP команди будуть виглядати наступним чином:
start /wait %systemdrive%\install\some_application\setup.exe /ключ / ще ключ,
start запустить інсталяцію програми, а /wait дочекається її закінчення перед тим, як виконати інсталяцію наступної програми. Використання /wait дуже важливе, т.к. інакше одночасно запуститься встановлення відразу кількох додатків і конфлікти неминучі.
Пакетні файли можуть бути запущені з cmdlines.txtабо svcpack.inf, які будуть виконані на Т-13/Т-12 етапі інсталяції Windows (Т-13 означає 13 хвилин до закінчення інсталяції). cmdlines.txtзручний для таких завдань як Додавання Користувачів або для імпортування заздалегідь підготовлених ключів реєстру HKEY_CURRENT_USER у профіль за замовчуванням (Default Profile).
Метод svcpack.inf, як правило, використовується для встановлення оновлень (хотфіксів). Однак ніщо не заважає розглядати пакетний файл як ще один хотфікс.
Приклад вмісту пакетного файлу:
@echo off
TITLE Windows XP SP2 - Unattended Installation
ECHO Над next few minutes you will see automated installations
ECHO of various sofware applications, and registry tweaks being
ECHO реалізовано.
ECHO Removing Wallpapers and Screensavers...
DEL "%systemroot%\*.bmp"
DEL "%systemroot%\Web\Wallpaper\*.jpg"
DEL "%systemroot%\system32\dllcache\*.scr"
DEL "%systemroot%\system32\*.scr"
ECHO Removing useless shortcuts...
Update.lnk"
DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Set
Program Access and Defaults.lnk"
DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Windows
Catalog.lnk"
ECHO Installing TweakUI 2.10 Powertoy
ECHO Please wait...
start /wait %systemdrive%\Install\TweakUI.msi /qn
ECHO Applying Registry Tweaks...
REGEDIT /S %systemdrive%\Install\RegTweaks.reg
ECHO Deleting ASP.NET User Account created by .NET Framework 1.1...
net user aspnet /delete
Цей пакетний файл робить видалення шпалер і скринсейверів, які встановлюються за умовчанням системою, а також деяких ярликів. Потім встановлює TweakUI, імпортує ключі реєстру та видаляє обліковий запис ASP.NET, створений при установці .NET Framework.
Виклик зовнішніх командних файлів:
1. Після виконання викликаного файлу керування не передається у файл, що викликає.
@ ECHO OFF
REMВиведення спискуlog-файлів
DIR C:\*. log
REMПередача виконання файлуf. bat
COPY A:\*.* C:\
2. Після виконання викликаного файлу керування передається у файл, що викликає:
@ECHO OFF
REMВиведення спискуlog-файлів
DIR C:\*.log
REMПередача виконання файлуf. bat
CALL f.bat
COPY A:\*.* C:\
Файлcmdlines.txtпотрібно покласти до директорії $OEM$, і Windows автоматично знайде його під час встановлення. Усі пакетні файли, що запускаються з cmdlines.txt, повинні перебувати в тій же директорії, що й cmdlines.txt.
Файлsvcpack.infзберігається у директорії I386 на інсталяційному диску (необхідно видалити звідти svcpack.in_). Усі пакетні файли, що запускаються з svcpack.inf, повинні знаходитися в директорії I386\svcpack, якщо це не прописано інакше в самому файлі.
У пакетних файлах широко використовуються команди передачі керування IF, FOR, SHIFT, а також параметри, що передаються з командного рядка та оператори перенаправлення вводу-виводу >, >>,<, |. Полезными оказываются операторы: «+» ‑ слияния файлов, «?» ‑ замены одного символа в имени файла или расширении, «*» ‑ замены нескольких символов в имени файла или расширении.
Системними іменами є: CON, NULL, AUX, COM1, COM2, PRN, LPT1, LPT2. Ними не можна називати файли.
Незважаючи на те, що користувачі комп'ютерів можуть легко обійтися без знання. DOS, тим більше, що у нових ОС DOSсхоже буде відсутня взагалі, їх знання може, знадобляться в позаштатних ситуаціях, коли Windows з якихось причин запускатися не бажає і доступний лише командний рядок. Довідку по командам можна отримати, виконавши команду help.
Завдання
1. Створити дві директорії. Наповнити один з них кількома файлами з різним розширенням. За допомогою ключового слова for написати bat-файл, що здійснює перенесення всіх файлів із зазначеним як параметр розширенням з однієї директорії до іншої. Дії коментувати за допомогою rem
2. Створити директорію. Наповнити її кількома файлами із двома типами розширень. За допомогою ключового слова for написати bat-файл, котрий здійснює копіювання всіх файлів одного типу з даної директорії в один файл, а з другим – в інший.
3. Створити директорію. Наповнити її кількома файлами із різним розширенням. За допомогою ключового слова for написати bat-файл, який видаляє всі файли з розширенням.txt.
4. Створити пакетний файл, що виконує авторизацію користувача, виведення дати і системного часу на екран, визначити ім'я каталогу, в якому знаходиться командний файл, що запускається, створити новий файл у цьому каталозі і перенаправити стандартний висновок в цей файл, тобто. створити журнальний файл.
6. Створити пакетний файл, що виконує авторизацію користувача, виведення дати та системного часу на екран, створити папку з ім'ям, що дорівнює поточній даті, у цій папці створити файл з довільним ім'ям (визначає користувач), здійснити виведення у новостворений файл чисел від 1 до 10.
Вивчити структуру пакетних файлів.
Реалізувати приклади, описані у методичних вказівках.
Отримати у викладача завдання, виконати його.
Підготувати звіт.
Вимоги до оформлення звіту
Титульна сторінка.
Мета роботи та завдання на виконання роботи.
Тест пакетного файлу.
Скріншоти виконання пакетного файлу.
Висновки про роботу.
Запитання для самоперевірки
Визначення пакетного файлу.
Призначення пакетних файлів.
Створення bat-файлу.
Основні команди.
Список використаних джерел
[Електронний ресурс]: Розробка пакетних файлів. - http://www.oszone.net/2245
У цій статті ми розглянемо таку корисну річ як « батник». Давайте спочатку дамо визначення, що таке bat файл. Пакетні або batch файли - це прості текстові файли, що містять набори команд ( інструкцію) інтерпретатора та мають розширення bat або cmd ( cmd працюють тільки в ОС сімейства NT). Створювати та редагувати такі файли можна за допомогою звичайного блокнота або будь-якого іншого текстового редактора.
Тепер Ви запитаєте, навіщо потрібно вміти писати такі файли бат? І навіщо вони потрібні? Спробую пояснити.
По-перше, вони застосовуються полегшення роботи, тобто. наприклад Вам потрібно постійно виконувати якусь операцію щодня ( наприклад, створювати архів тих чи інших документів), за допомогою батника це можна автоматизувати, і Ви в цьому вже не братимете участі.
По-друге, ці пакетні файли дуже потужні ( якщо звичайно вміти їх писати), тобто. Ви можете навіть написати непогану програму ( я маю на увазі по функціоналу). Особисто мені вони дуже допомагають у роботі, і про деякі речі я вже просто забув, коли це робив я вручну.
Тепер перейдемо безпосередньо до основ цих батників. Як вони створюються, Вам потрібно просто створити простий текстовий документ відкрити його і відразу на вкладці « Файл->зберегти як», вписати замість розширення « Текстовий документ.», наприклад « Текстовий документ.» і зберегти, от і вийде у нас батник з розширенням.bat, але він поки що нічого не робить.
Для початку я наведу приклад батника, який я використовую на роботі для архівації документів.
"C:\Program Files\WinRAR\winrar.exe" a -r -dh -ed -agYYYY-mm-dd E:\arhaccounts\ d:\accounts\*.doc "C:\Program Files\WinRAR\winrar. exe" a -r -dh -ed -agYYYY-mm-dd E:\arhaccounts\ d:\accounts\*.xls "C:\Program Files\WinRAR\winrar.exe" a -r -dh -ed -agYYYY -mm-dd E:\arhaccounts\ d:\accounts\*.txt
Тепер трохи розповім, що робить цей батник. Запускається WinRar, потім йдуть команди вінрару:
- a – це додати до архіву;
- -r - обробляти вкладені папки;
- -dh - відкривати спільно використовувані файли;
- -ed – не додавати порожні папки;
- YYYY-mm-dd - додаємо до імені архіву поточну дату ( формат дати);
- E: \ arhaccounts \ - шлях, де лежатиме кінцевий архів;
- d:\accounts\*.doc - шлях і маска файлів, які потрібно заархівувати.
У цьому випадку ми архівуємо всі документи Word, Excel та текстові файли, архівувати решту нам не потрібно. У нас архівація йде на інший диск, і ми ще копіюємо отриманий архів на інший комп'ютер, щоб архіви зберігалися і в іншому кабінеті. Копіювання йде через мережу відповідно комп'ютер, на який копіюється архів, повинен бути включений. Для цього можна використати таку команду:
Copy E:\arhaccounts\*.rar \\namecomp\arhiv\
Приклади команд для файлів 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 файлів ( батників).
Продовження теми у статті -
Писати bat-файли може кожен!
Командний процесор
До складу багатьох операційних систем, у тому числі розроблених корпорацією Microsoft, входить командний процесор. Так називається програма, яка ініціює виконання всіляких дій у відповідь на команди, які вводять користувач з клавіатури. В основному ці дії полягають у запуску необхідних програм із тими чи іншими параметрами. Але не тільки; далі ми побачимо, деякі команди виконуються безпосередньо командним процесором. В основному це команди, які служать для управління контекстом і послідовністю виконання команд. Проте ми особливо глибоко замислюватимемося про природу команд, у разі, без необхідності. Важливіше інше: будь-яка програма, яку технічно можна запустити з командного рядка, розглядається командним процесором як команда. Він робить різниці між «рідними» командами, спочатку вбудованими у операційну систему, і програмами, які були встановлені поверх неї.
Для того, щоб запустити командний процесор:
Натисніть на кнопку Пуск. На екрані буде виведено головне меню.
Виберіть у головному меню пункт Виконати. На екран буде виведено діалогове вікно Запуск програми.
У полі Відкрити введіть рядок cmd.
Натисніть на кнопку OK. На екрані буде виведено вікно командного процесора.
Командний рядок та команди
Вікно командного процесора в первозданному вигляді виглядає похмурим, і працювати з ним більшості людей не дуже зручно. Набагато простіше користуватися файловими менеджерами у стилі Norton Commander. Вони передбачені як засоби для швидкої навігації по файловій системі, так і терміну для введення команд.
Для того, щоб ввести команду:
Наберіть текст команди у командному рядку.
Натисніть клавішу Enter.
Командний процесор та команди операційної системи описані в експлуатаційній документації на останню. Ця документація частково міститься всередині операційної системи. Для доступу до неї призначена команда help. За цією командою на екран відображається список доступних команд. Щоб отримати опис конкретної команди, як параметр команда helpслід вказати її ім'я. Командний рядок, показаний на наступному лістингу, виводить на екран опис команди for.
Якщо ви спробували ввести команду help, то напевно звернули увагу, що результат її роботи (т.зв. видача) не вміщається на один екран. Така сама проблема виникає з текстом опису команди for. Хороша новина полягає в тому, що видачу можна перенаправити у файл. Командний рядок, показаний на наступному лістингу, формує файл commands.txtмістить список всіх команд MS-DOS.
help > commands.txt
Для того, щоб сформувати файл з описом команди forпотрібно дати таку команду (ім'я вихідного файлу можете зробити будь-яким).
help for > for.txt
Усього в сучасних операційних системах корпорації Microsoft трохи менше 80 команд і описати їх в одній статті неможливо. Тут ми можемо лише згадати про декілька команд, корисних для автоматизації обробки файлів та показати, як ними користуватися. Ці команди будуть надалі використовуватись у прикладах. Деталі ви завжди зможете уточнити за командою helpабо у довіднику.
copy- Копіювання одного або декількох файлів;
del- Видалення одного або декількох файлів;
move- переміщення одного чи кількох файлів чи каталогів;
rename(скорочено ren) - перейменування одного або кількох файлів чи каталогів;
xcopy- Копіювання дерева підкаталогів;
mkdir(скорочено md) - Створення каталогу;
rmdir(скорочено rd) - Видалення каталогу.
Одне із загальних правил синтаксису команд MS-DOS у тому, що за вказівці параметрів спочатку вказується джерело, та був результат. Наприклад, якщо ми хочемо перемістити файл beer.txtз каталогу boxу каталог table, ми повинні запровадити команду, наведену на наступному лістингу.
move box\beer.txt table
Спершу що перемістити, потім куди перемістити.
Якщо ми хочемо перейменувати файл lena.txtу файл natasha.txtкоманда повинна бути записана так, як показано нижче.
ren lena.txt natasha.txt
Спочатку що перейменувати, потім у що перейменувати.
Поточний каталог. Абсолютні та відносні шляхи
Працюючи з файловими командами виняткову важливість набуває поняття поточного каталогу. Справа в тому, що при вказівці файлу як параметр команди ми завжди використовуємо один із двох можливих способів вказівки на них: або абсолютний шлях, або відносний шлях. На повному шляху ми вказуємо все, починаючи з диска (або мережного імені комп'ютера), наприклад d:\misha\box\beer.txt. Який би каталог не виявився поточним у момент введення команди, повний шлях буде відповідати одному й тому файлу. Для відносного шляху поточний каталог є відправною точкою. Найпростіший випадок відносного шляху – ім'я файлу. У контексті виконання команди воно означає файл із таким ім'ям, розташований у поточному каталозі.
Для запису відносного шляху до поточного каталогу є умовний запис . (крапка). Для запису відносного шляху до каталогу, де міститься поточний каталог, існує умовний запис .. (Дві точки). Команда, показана на наступному лістингу, копіює всі файли з поточного каталогу до каталогу neighbour, розташований поруч із ним.
copy *.* .\neighbour
Командні файли
Досі, наводячи приклади, ми вважали, що кожного разу вводимо команди вручну. При обробці великої кількості файлів або при систематичному виконанні тих самих команд це стає обтяжливо. Тому в командному процесорі передбачено можливість виконання командних файлів. Командний файл - це текстовий файл, у якому набрані команди (чи хоча б одна команда). Приклад командного файлу показано на наступному списку. Спробуйте здогадатися, що робить цей командний файл.
help copy > copy.help
help move > move.help
move *.help msdos-help
Якщо призначення цього файлу залишається для вас загадкою, то спробуйте створити і виконати його. Командним файлам прийнято давати розширення bat. По ньому файли цього пізнаються командним процесором. Цей файл можна назвати, наприклад, make-help.bat.
Щоб запустити командний файл:
Введіть його ім'я як команду. Після цього командний файл буде виконано.
У командному файлі кожна команда займає один рядок. Точніше, існує спосіб розташувати одну команду на кількох рядках, що йдуть, для цього безпосередньо перед кожним перекладом рядка слід поставити символ «кришка» ^ . (Необхідно, щоб кожна «кришка» була останнім символом у своєму рядку; після неї не повинно бути прогалин та табуляцій). Приклад такої команди показано на наступному лістингу.
if exist disser.txt ^
copy disser.txt ^
d:\science\papers\drafts\sources
Але для простоти, щоб щоразу не робити застережень, ми вважатимемо, що в певному сенсі це один довгий «логічний» рядок.
При виконанні командного файлу командний процесор переглядає його зверху вниз від першого рядка до останнього і виконує команди у порядку, у якому їх виявляє. Виконує він загалом їх так, ніби ми кожну з них вводили вручну. В цілому, тому що деякі команди при введенні вручну і при виконанні з командного файлу поводяться трохи по-різному.
Забігаючи вперед, скажімо, що при необхідності послідовність виконання команд можна змінити за допомогою керуючих команд (з чим може бути пов'язана така необхідність, окреме питання).
Не плутайте поточний каталог з каталогом, в якому знаходиться командний файл, що запускається. Припустимо, поточним каталогом є work, у ньому знаходиться каталог tools, а в каталозі інструментів зберігаються командні файли. Ви запускаєте один із них командою tools\collect-images.bat. Так от, «з точки зору» цього командного файлу, поточним каталогом все одно виявиться work, а не tools.
Коментування командного файлу та його видачі. Команди echo та rem
Командний файл, по суті, є програмою, написаною мовою командного процесора операційної системи. Текст програми потрібно забезпечувати коментарями, щоб, повернувшись до нього через деякий час, не згадувати болісно, для чого ця програма потрібна, і як вона влаштована.
У системі команд MS-DOS для оформлення коментарів передбачено команду rem. Це фіктивна команда, яка передбачає виконання будь-яких дій, але дозволяє написати в рядку після свого імені довільний текст. Причому командний процесор не сприймає його як синтаксичну помилку. Приклад оформлення командного файлу коментарями показано на наступному лістингу.
rem ************************************************* ****
rem Формуємо файли довідки
help copy > copy.help
help move > move.help
move *.help msdos-help
Зверніть увагу на порожні рядки, якими командний файл розбитий на абзаци. Цей простий прийом дозволяє зробити командний файл читальнішим.
При виконанні наведеного вище командного файлу всі команди виводитимуться на екран у міру їх виконання, що завжди зручно. Видалення команд можна вимкнути за допомогою команди @echo off. Символ «собака» перед командою echoотже, сама ця команда повинна виконуватися в «мовчазному» режимі. З таким самим успіхом ми могли б не користуватися командною echo off, а помістити «собаку» перед кожною командою.
У багатьох випадках потрібно, щоб командний файл виводив на екран (або файл) ті чи інші повідомлення. В одних випадках це можуть бути повідомлення про помилки, в інших інформаційні повідомлення, які пояснюють користувачеві командного файлу, що відбувається в даний момент, коли ми формуємо командним файлом якийсь інший корисний файл. Для виведення повідомлень застосовується та сама команда echo. Як параметр їй передають текст повідомлення. Лістинг удосконаленого командного файлу наведено нижче.
rem ************************************************* ****
rem Формування файлів довідки за командами copy та move
rem ************************************************* ****
@echo Формуємо файли довідки. Одну секундочку...
rem Формуємо файли довідки
help copy > copy.help
help move > move.help
rem Створюємо каталог для зберігання файлів довідки
rem Переміщуємо файли довідки до підготовленого каталогу
move *.help msdos-help
echo Готово!
Передача командному файлу параметрів
Припустимо, ми хочемо створити командний файл, який спочатку формує довідку з описом заданої користувачем команди, а потім завантажує його для перегляду блокноту. Фокус у тому, щоб при черговому запуску командного файлу якимось чином повідомити, яка саме команда нас цікавить цього разу.
Для вирішення цього завдання передбачено механізм обробки параметрів. Працює він досить просто. Якщо під час запуску командного файлу користувач вказав кілька параметрів, то у тексті командного файлу перший із них позначаємо записом %1 , другим записом %2 , третій записом %3 і т.д. Цими позначеннями ми користуємося у тексті командного файлу приблизно як і, як у природній промови займенниками.
Текст командного файлу, який вирішує поставлене завдання, наведено на наступному лістингу. Зверніть увагу на команду help. Як її параметр їй передається перший параметр командного файлу.
rem Формуємо файл із описом команди,
rem ім'я якої передано параметром
help %1 > help.tmp
rem Завантажуємо файл опису до редактора Блокнот
notepad help.tmp
Припустимо, що ми надали цьому командному файлу ім'я show-help.bat. Для того, щоб завантажити в блокнот опис команди, наприклад, dir, ми повинні ввести команду в такий спосіб.
show-help.bat dir
Наступний командний файл створює каталог з ім'ям, вказаним у першому параметрі, і записує файл з текстом опису команди, зазначеної у другому параметрі.
rem Приклад командного файлу з двома параметрами
rem Створюємо каталог з ім'ям, заданим першим параметром
rem Створюємо в ньому файл з описом команди,
rem заданою другим параметром
help %2 > %1\%2.help
Що станеться, якщо користувач під час запуску цього командного файлу вкаже не два, а чотири параметри? Нічого страшного, вони нічого не завадять, просто не будуть використані. А що буде, якщо користувач вкаже лише перший параметр? Другий параметр виявиться порожнім. Ефект вийде такий: командний файл буде виконано, але так, начебто на місці запису %2 нічого нема. Команда help сформує список усіх команд і помістить його у файл із порожнім ім'ям та розширенням.help. Якщо користувач запустити цей файл, не вказавши жодного параметра, то при спробі командного процесора виконати команду md(нагадаємо, вона призначена для створення каталогу), ми отримаємо повідомлення про синтаксичну помилку, оскільки у команди md обов'язково має бути параметр.
Таким чином, використання параметрів створює великі можливості, але може суттєво ускладнити справу. Щоб командний файл завжди працював коректно, необхідно перевіряти коректність вказівки користувачем параметрів і якимось чином реагувати на неповні чи неправильні вхідні дані. Можна, звичайно, цього і не робити, але командний файл, що некоректно працює, може наламати дров, особливо, якщо він передбачає видалення або перезапис даних.
Змінні. Команда set
Змінною називається назване значення. У підручниках із програмування змінну зазвичай порівнюють із конвертом, на якому написано ім'я. Усередину конверта можна покласти щось, наприклад, певну суму грошей – це значення. Як і конверт, значення змінної можна змінити.
Для оголошення змінної та одночасно для присвоєння їй значення застосовується команда set. Приклад запису цієї команди показано на наступному лістингу.
Для отримання значення змінної її ім'я поміщають між двома знаками відсотка, як показано нижче.
rem Компілятор хелп-файлів у форматі CHM
set help_compiler=c:\HTML Help Workshop\hcc.exe
rem Проект хелп-файлу модуля "Склад"
set store_hpj=help\sources\store\store.hpj
rem Проект хелп-файлу модуля "Продаж"
set sales_hpj=help\sources\sales\sales.hpj
rem Компілюємо хелп-файли
%help_compiler% %store_hpj%
%help_compiler% %sales_hpj%
Наведений лістинг показує, у чому користь змінних.
По-перше, вони дозволяють замість довгого фрагмента (наприклад, шляхи до компілятора хелп-файлів) використовувати всередині командного файлу синонімічний короткий. Як мінімум, це зручно.
По-друге, вони дозволяють уникнути повторення у тексті командного файлу фрагментів, які можуть змінюватися. Уявіть собі, що ми перевстановили Microsoft HTML Workshop на інший каталог. Якщо в командному файлі для запису шляху до нього застосовується змінна, то буде достатньо виправити в командному файлі тільки один рядок, а саме, в якому надається значення змінної help_compiler. Якби ми писали шлях до компілятора щоразу, коли його потрібно волати, то після зміни шляху нам довелося б виправити кожен такий рядок. У наведеному прикладі їх дві, але в реальному проекті їх з таким самим успіхом може виявитися п'ять чи п'ятнадцять, за кількістю хелп-файлів, які ми хочемо скомпілювати. Проблема не в тому, що виправляти вручну кожен рядок важко (зрештою, команди “copy” та “paste” ніхто не скасовував), а в тому, що це сильно підвищує ймовірність випадкової помилки.
Параметри командного файлу також є змінними, але від звичайних змінних відрізняються тим, що значення задаються при запуску командного файлу. Надалі, говорячи про змінних, особливо про роботу з їх значеннями, ми будемо мати на увазі і параметри командного файлу теж, принаймні, без явних застережень з цього приводу.
При написанні командних файлів часто застосовують наступний прийом: кілька значень змінних вказують поруч (або перемежовуючи їх символами чи рядками), щоб отримати деяке нове осмислене значення. Приклад наведено на наступному лістингу.
Перевірка умов та вибір варіантів. Команди if та goto
Команда if дозволяє виділяти у командному файлі групи команд, які виконуються чи виконуються залежно від певних умов. Для чого це потрібно?
Перевірка умови - майже необхідний захід під час створення командних файлів, які використовують параметри. Перед тим, як розпочинати роботу, командний файл, взагалі кажучи, повинен упевнитися в тому, що йому передано коректний набір параметрів. В іншому випадку великий ризик, що він виконається неправильно або безрезультатно, а користувачеві залишиться тільки гадати, в чому проблема. Більше того, якщо командний файл видаляє, переміщає або перезаписує будь-які дані, то при некоректних параметрах він може навіть завдати шкоди.
На наступному лістингу показаний командний файл компіляції хелп-файлу. На початок командного файлу додано перевірку першого параметра на непустоту. Зверніть увагу на таку особливість синтаксису: для порівняння використовується здвоєний знак рівності. Якщо перший параметр виявляється непустим, спрацьовує команда goto, яка перекидає командний процесор до зазначеної мітки. В даному випадку ім'я цієї позначки compile. Зверніть увагу, що там, де мітка знаходиться, її ім'я передує двокрапкою, а в команді goto немає. При першому порожньому параметрі командний процесор переходить до наступного рядка, який видає повідомлення про помилку. А потім до наступної, яка перекидає його в кінець файлу до мітки з ім'ям finish.
if not "%1"=="" goto compile
rem Якщо параметр порожній, надаємо повідомлення про помилку
echo Не вказано ім'я проекту хелп-файлу
rem і переходимо в кінець командного файлу
rem до мітки finish
rem Це мітка з ім'ям compile
rem Нижче розташовані команди компіляції
rem Шлях до компілятора хелп-файлів
set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"
rem Шлях до каталогу, в якому знаходяться проекти хелп-файлів
set project_path=e:\work\projects\help-projects
rem Викликаємо компілятор для обробки конкретного проекту,
rem ім'я якого передаємо у першому параметрі
%help_compiler% %project_path%\%1.hpj
rem Це мітка з ім'ям finish
Скажімо прямо, запропонований спосіб перевірки параметра не вдалий.
По-перше, якщо користувач помилково вкаже як параметр ім'я неіснуючого файлу, командний файл цим задовольниться і спробує компіляції. Більш правильний спосіб – перевірити, чи існує такий файл насправді. Для цього у мові команд MS-DOS передбачено спеціальне слово exist. Тому краще було б написати: if exist %1.hpj goto compile.
По-друге, активне використання команди goto(т.зв. безумовного переходу) та міток сильно заплутують код. Технічно вони нічим непогані, але налагоджувати та супроводжувати командний файл, написаний у такому стилі, досить незручно. Тому програмісти давно вважають безумовний перехід прийомом небажаним. Нижче показаний правильніший, з погляду стилю програмування, структурований варіант, у якому використовується конструкція if…else. Працює вона так: якщо умова істинна, виконуються команди у дужках після if, а якщо хибно, то в дужках після else.
rem Перевіряємо, чи заданий параметр
if not exist %1.hpj (
rem Шлях до компілятора хелп-файлів
set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"
rem Шлях до каталогу, в якому знаходяться проекти хелп-файлів
set project_path=e:\work\projects\help-projects
rem Викликаємо компілятор для обробки конкретного проекту,
%help_compiler% %project_path%\%1.hpj
Наведемо ще один приклад роботи з перевірками. Наступний командний файл створює каталог з ім'ям help-files(Припустимо, для вивантаження в нього скомпільованих хелп-файлів). При цьому, якщо каталог з таким ім'ям вже існує (і в ньому, ймовірно, знаходяться старі файли хелп, які не хотілося б втрачати: раптом нові виявляться гірше?), командний файл присвоює йому розширення bak. Але якщо каталог help-files.bakвже існував, то командний файл його видаляє (вважатимемо, що однієї резервної копії нам вистачить).
if exist help-files.bak rd help-files.bak
if exist help-files ren help-files help-files.bak
Масова обробка файлів. Команда for
Команда for дозволяє організувати виконання однотипних дій, що повторюються. Можна використовувати її для того, щоб вивести на екран числа від одного до десяти, як показано на наступному списку.
for /l %%i in (1,1,10) do echo %%i
Змінна iназивається лічильником циклу. Через своєрідність синтаксису команди forІм'я лічильника циклу має складатися з однієї літери. Причому, якщо ми пишемо командний файл, то перед ім'ям лічильника циклу треба поставити здвоєний знак відсотка, якщо ми просто набираємо команду в командному рядку, то одиночний.
Логіка роботи цієї команди є такою. Після слова inвказано діапазон зміни лічильника циклу. У цьому варіанті команди це трійка чисел: початкове значення лічильника, крок рахунку, граничне значення лічильника. При виконанні команди командний процесор спочатку надасть змінній iзначення 1 , а потім на кожному кроці циклу буде збільшувати його на 1 поки воно не перевищить 10 . Очевидно, таких кроків буде десять. Якби як крок рахунку ми вказали число 2 , то цикл виконався б п'ять разів. На кожному етапі циклу виконується тіло циклу, написане після слова do. У прикладі це команда echo, яка виводить на екран поточне значення лічильника циклу.
Напевно, можна придумати ситуацію, коли щось подібне насправді потрібно, але зазвичай команда forвикористовується для перебору та обробки файлів. Треба сказати, що у досить простих випадках масова обробка файлів виконується за допомогою символів підстановки. Якщо ми хочемо всім файлам в поточному каталозі замінити розширення .htmна .html, ми вводимо команду ren *.htm *.html. Але якщо те саме треба зробити не в одному каталозі, а в дереві каталогів, то без команди for не обійтися. Нижче наведений командний файл виконує цю операцію для всіх htm-файлів у підкаталозі website поточного каталогу. Точніше, у всьому дереві каталогів, що знаходиться всередині website.
для /r website %%i in (*.htm) do ren %%i %%~ni.html
Ключ /rвказує на необхідність обходу каталогу websiteта всіх його нутрощів. Якщо його не вказати (але тоді і каталог вказувати не дозволяється), то будуть оброблені тільки файли в поточному каталозі. Діапазоном значень лічильника циклу в даному варіанті команди є множина всіх файлів з розширенням .htm, що знаходяться всередині каталогу (точніше, дерева) website. Дивний на перший погляд запис ~niозначає, що значення змінної iпотрібно виділити лише ім'я файлу. У мові команд MS-DOS передбачено кілька таких модифікаторів, наприклад запис ~хіозначає розширення файлу. Усі модифікатори описані у довідці за командою for.
Тіло циклу може складатися з кількох команд, укладених у дужки.
для /r website %%i in (*.htm) do (
rem Виводимо ім'я файлу
rem Перейменовуємо файл
ren %%i %%~ni.html
Передача керування іншому командному файлу. Команда call
Існує можливість викликати з одного командного файлу інший командний файл. Для цього служить команда call. Чудово, змінні, задані в командному файлі, що викликає, «видні» викликаному. І навпаки, після того, як викликаний файл закінчить роботу і поверне керування викликавшому, останній «бачитиме» змінні, залишені йому спричиненим «у спадок». Це дозволяє розробнику командних файлів діяти, наприклад, в такий спосіб. Якщо кілька командних файлів мають користуватися одними й тими самими значеннями, припустимо, шляхами до якихось файлів, їх можна винести окремий командний файл, який відіграватиме роль конфігураційного файла. Кожен робочий командний файл починається викликом конфігураційного. Виграш у тому, що при зміні шляхів вносити зміни доведеться тільки в один файл конфігурації, а не в безліч робочих.
"Конфігураційний" командний файл config.bat.
rem Шлях до компілятора хелп-файлів
set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"
rem Шлях до каталогу, в якому знаходяться проекти хелп-файлів
set project_path=e:\work\projects\help-projects
"Робочий" командний файл.
rem Налаштовуємо змінні
rem Перевіряємо, чи заданий параметр
if not exist %1.hpj (
rem Якщо параметр порожній, надаємо повідомлення про помилку
echo Такого проекту хелп-файлу немає.
rem Нижче розташовані команди компіляції
rem Викликаємо компілятор для обробки конкретного проекту,
rem ім'я якого передаємо у першому параметрі
%help_compiler% %project_path%\%1.hpj