Секрети Windows: статті про реєстр, rundll32.exe, програмах І знову пакетні файли, частина 1
Інші наші розсилки:- Новини IT-світу. Щодня посилання на нові новини та статті популярних комп'ютерних сайтів.
- Рецензії на нові книги. Опис нових книг про комп'ютери, дизайні, бухгалтерії, психології та ін. Напрямках думки людства.
- Новини нашого сайту. Щодня посилання на нові матеріали, що надходять на наш сайт: від посилань на статті до посилань на нові та оновлені записи онлайнових баз даних.
Операційна система Windows Vista підтримує безліч методів автоматизації часто виконуваних вами дій. Зокрема, до стандартних методів належать пакетні файли, inf-файли, сервер сценаріїв Windows (WSH), а також інструментарій управління Windows (WMI). Крім того, окремо від операційної системи поставляється комплект PowerShell, що володіє величезною функціональністю.
Але давайте все ці сучасні технології залишимо на якийсь найближче майбутнє, а зараз поговоримо про старих добрих пакетних файлах (bat-файлах). Незважаючи на свій солідний вік, цей спосіб автоматизації досі популярний, тому що дозволяє досить швидко і просто створити сценарій, який виконує різні команди.
Пакетний файл являє собою звичайний текстовий файл з розширенням .bat або .cmd, що містить в собі список команд, які повинні бути виконані командним рядком cmd.exe. В операційній системі Windows Vista різниці між bat-файлами і cmd-файлами практично немає. Файли як з тим, так і з іншим розширенням обробляються за допомогою командного рядка cmd.exe. У попередніх же версіях Windows bat-файли оброблялися командним рядком command.com. Дана командний рядок не підтримує всіх можливостей cmd.exe, тому правильніше створювати cmd-файли (особливо якщо ви збираєтеся використовувати їх не тільки на операційній системі Windows Vista).
У найпростішому випадку bat-файл містить в собі просто кілька команд запуску програм, кожна з яких записана з нового рядка. Наприклад, нижче представлений приклад простого bat-файлу, що запускає дві програми: regedit.exe і calc.exe. При цьому програми запускаються послідовно. Тобто, поки не буде завершена перша команда bat-файлу, не почнеться виконання другої команди.
Більш складні приклади bat-файлів використовують спеціальні програми командного рядка cmd.exe, які дозволяють домогтися взаємодії між різними програмами, а також їх непослідовного запуску. Далі ми розглянемо ці програми.
Деякі символи в bat-файлах мають особливе призначення, тому їх не можна використовувати в рядках, що не обрамлених лапками. Наприклад, до таких символів відносяться такі символи: () <> ^ |.
Якщо з яких-небудь причин ви хочете використовувати ці символи в рядку, що не обрамлена лапками, тоді перед символами, що мають особливе призначення, необхідно поставити символ ^. Наприклад, замість фрази Tom Jarry потрібно використовувати фразу Tom ^ Jarry,
Замість команд echo off і echo on можна використовувати команди @echo off і @echo on. В цьому випадку в командному рядку також не буде доступний широкому запис про виконання відповідної команди echo.
Як ви, напевно, помітили, два наведених вище способу введення команди echo відрізняються один від одного лише символом @ на початку рядка. Загальне правило таке. Щоб в командному рядку не відображалася будь-яка виконувана команда, перед нею потрібно поставити символ @.
Як вивести повідомлення на екран
Вивести повідомлення на екран дуже просто. Для цього достатньо скористатися командою виду echo [текст повідомлення]. Дана команда відображає повідомлення навіть при вказівці команди echo off (причому відображає повідомлення один раз). Якщо ж в сценарії встановлена команда echo on, тоді текст повідомлень echo буде дублюватися.
Як працювати з аргументами bat-файлу
Цікавою можливістю bat-файлів є можливість обробки аргументів запуску. Аргументами запуску називаються значення, передані в bat-файл при його запуску. Наприклад, команда test.bat one 34 test запускає файл test.bat, передаючи йому три аргументи: one, 34 і test.
Працювати з отриманими при запуску аргументами досить просто. Для цього достатньо звернутися до них за допомогою змінних% 1 (перший аргумент),% 2 (другий аргумент),% 3 (третій аргумент) і т.д.
Також в сценарії можна використовувати змінну% 0, яка вказує на шлях до запущеного вами bat-файлу.
Вміст змінних, що визначають аргументи запуску bat-файлу (а також змінної% 0), можна конкретизувати за допомогою набору спеціальних змінних виду%
[Символ] [номер змінної]. Ці змінні представлені нижче.
1. Видалити лапки, що обрамляють вміст змінної% 1.$ PATH: 1. Замінити значення змінної% 1 на повне ім'я першого знайденого в змінного середовища PATH файлу. Якщо жодного файлу в змінного середовища PATH, не знайдено, тоді значення змінної% 1 замінюється символом нового рядка.
Цікавою можливістю використання змінних виду%
[Символ] [номер змінної] є можливість їх об'єднання (тобто, об'єднання тих даних, які вони виводять). Для цього достатньо замість двох змінних використовувати одну виду%
[Символ першої змінної] [символ другою змінною величиною] [номер змінної].
Для прикладу давайте розглянемо bat-файл (лістинг нижче), який виконує дві передані в нього команди, як два аргументи запуску.
Ще один приклад використання конкретних змінних можна виразити за допомогою одного рядка - "%
dp0 [ім'я файлу] ". За допомогою цього рядка виконується запуск певної програми, яка знаходиться в тому ж каталозі, що і сам bat-файл. Іноді ця строчка буває особливо корисна і необхідна.
Змінна середовища% ERRORLEVEL%
Змінна середовища% ERRORLEVEL% містить в собі код, який повернула попередня виконана bat-файлом команда. Не всі команди повертають будь-які коди. Якщо команда не повернула нічого, тоді значення змінної середовища% ERRORLEVEL% дорівнює 0.
Нижче перераховані програми, які використовують змінну середовища% ERRORLEVEL%.
- Choice.exe. Поміщає в змінну середовища номер натиснутої користувачем клавіші.
- Color.exe. Присвоює значення 1, якщо колір тексту і колір фону збігаються.
- Exit.exe. Присвоюється значення коду повернення, якщо він був вказаний при виклику даної програми.
- Set.exe. Присвоює значення 1, якщо шукана змінна середовища не знайдено.
- Setlocal.exe. Присвоює значення 1, якщо опція, яка використовується при запуску setlocal.exe, не підтримується, так як вимкнена розширена обробка середовища.
Як визначити рядок, за допомогою якої був запущений bat-файл
Для цього достатньо скористатися змінної середовища% CMDCMDLINE%. Саме в ній знаходиться рядок, яку користувач вводив для запуску даного bat-файлу.
Що таке розширена обробка команд
Розширеної обробкою команд називається режим роботи командного рядка cmd.exe, при якому деякі стандартні програми операційної системи Windows Vista мають додатковими можливостями.
За замовчуванням розширена обробка команд завжди включена. Однак ви самостійно можете відключити або включити її. Для цього достатньо скористатися одним з наступних методів.
- Щоб відключити / включити розширену обробку команд для конкретного сеансу роботи з командним рядком, досить виконати запуск командного рядка за допомогою синтаксису виду cmd.exe / E: OFF (щоб відключити розширену обробку команд) або cmd.exe / E: ON (щоб включити розширену обробку команд).
- Щоб відключити / включити розширену обробку команд для конкретного користувача, необхідно створити параметр REG_DWORD типу EnableExtensions. Даний параметр повинен знаходитися в галузі реєстру HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor. Для відключення розширеної обробки команд даному параметру потрібно присвоїти значення 0. Інакше значення 1.
- Щоб відключити / включити розширену обробку команд для всіх користувачів комп'ютера, необхідно створити параметр REG_DWORD типу EnableExtensions. Даний параметр повинен знаходитися в галузі реєстру HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command Processor. Для відключення розширеної обробки команд даному параметру потрібно присвоїти значення 0. Інакше значення 1.
Нижче представлені програми, на які впливає відключення / включення розширеної обробки команд, а також їх опції, які доступні тільки при включеній розширеної обробці команд.
- DEL | ERASE. Висновок для ключа / S змінюється на зворотний (тобто, будуть відображатися імена віддалених файлів).
- CD | CHDIR. Прогалини перестають розглядатися як роздільники. Тобто, ви можете не укладати шлях до каталогу в лапки, навіть якщо він містить прогалини. При відключеною обробці команд шлях до каталогу потрібно брати в лапки.
- MD | MKDIR. Виконується автоматичне створення всіх проміжних каталогів, які визначені в дорозі, але не існують насправді. При відключеною обробці команд неіснуючі проміжні каталоги необхідно створювати самостійно.
- PROMPT. Підтримуються додаткові символи форматування $ + (відобразити стільки знаків плюс, яка глибина стека програми PUSHD встановлена в поточний момент) і $ M (якщо поточний диск є мережевим, тоді також відобразити повний віддалений шлях до нього).
- PUSHD. Дозволяється збереження в стеці мережевих шляхів. При цьому мережевим шляхах присвоюються тимчасові імена дисків.
- POPD. Автоматично виконується видалення тимчасових імен дисків, створених для поміщених в стек мережевих каталогів.
- SET. Включена можливість виведення всіх доступних змінних середовища, що починаються з введеної літери (за допомогою синтаксису set [буква]). Підтримуються дві додаткові опції: опція / A і опція / P.
- SETLOCAL. Підтримуються опції ENABLEEXTENSIONS і DISABLEEXTENSIONS, що дозволяють включити / відключити розширену обробку команд до виконання команди. Підтримуються опції ENABLEDELAYEDEXPANSION і DISABLEDELAYEDEXPANSION, що дозволяють включити / відключити відкладене розширення змінної середовища до виконання команди.
- ENDLOCAL. Відновлює стан розширеної обробки команд за замовчуванням, якщо попередня команда SETLOCAL змінила цей стан за допомогою опцій ENABLEEXTENSIONS і DISABLEEXTENSIONS.
- IF. Підтримуються оператори порівняння (EQL, NEQ, LSS, LEQ, GTR, GEQ), а також варіанти синтаксису IF DEFINED [змінна] [команда] і IF CMDEXTVERSION [число] [команда].
- FOR. Підтримуються наступні варіанти синтаксису:
- CALL. Підтримується використання міток. Тобто, команд виду call: [ім'я мітки].
- SHIFT. Підтримується опція / n, що дозволяє визначити початок зсуву.
- GOTO. Підтримується варіант команди GOTO: EOF, що передає управління в кінець пакетного файлу.
- START. Якщо розширення виконуваного файлу не вказано, програма автоматично підставляє наступні розширення. COM, .EXE, .BAT, .CMD. При запуску неісполняемих файлів через механізм зіставлення (наприклад, при запуску файлу primer.doc) немає необхідності вказувати розширення для зіставлення.