Консольный режим и пакетные файлы в ОС Windows
Консольный режим и пакетные файлы в ОС Windows
Основные сведения
Консольный режим Windows
В ранних операционных системах ПЭВМ главным средством общения пользователя с системой являлся диалог, основанный на языке команд операционной системы. Пользователь вводит в текстовом режиме с клавиатуры команду, системный интерпретатор выполняет ее и выводит результаты на экран. Работа пользователя в современных операционных системах в основном протекает с использованием средств многооконного графического интерфейса, когда основные действия – переключение окон, вызов команд меню, запуск команд – выполняются с помощью мыши, а клавиатура используется во вспомогательных целях. Тем не менее, режим текстового диалога сохраняется и в ряде случаев предоставляет самый простой способ выполнить действия, которые иначе потребовали бы использования специальных системных утилит. Использование команд дает также удобную возможность выполнить некоторые действия сразу над группой файлов с использованием символов шаблона * и ?. Кроме того, из системных команд могут быть образованы пакетные файлы (в просторечии BAT-файлы), которые позволяют выполнять достаточно сложные последовательности действий для заданных аргументов.
Для того чтобы из графического режима перейти в режим текстового диалога, следует выбрать пункт меню Пуск/Выполнить и набрать имя файла интерпретатора команд CMD.EXE. Можно также запустить одну из программ-оболочек текстового режима (например, FAR.EXE), которые сохраняют возможность вводить команды операционной системы с клавиатуры.
Справочную информацию по любой команде Windows можно получить, введя соответствующую команду с ключом /?. Кроме того, команда HELP в Windows, введенная без параметров, выдает список всех команд, а с параметром – именем команды – информацию по данной команде.
Структура команды
Команда состоит из имени команды и параметров. Различают внутренние команды, которые выполняются самим интерпретатором, и внешние команды, которые представляют собой программы, расположенные в системном каталоге и ничем другим не отличающиеся от прочих программ.
Если интерпретатор команд не опознает команду как внутреннюю и не может найти ее имя среди выполняемых файлов в системных каталогах, он считает, что введено имя прикладной программы, которую следует запустить. Если перед именем программы не указан путь, то интерпретатор ищет программу в текущем каталоге (папке), в системных каталогах, а также в тех каталогах, пути к которым содержатся в системной переменной PATH. Заглавные и строчные буквы не различаются при поиске файла.
Если имя файла или каталога содержит пробелы или другие специальные символы, то его следует заключать в кавычки, например, "C:\Program Files\Far\Far.exe".
Среди параметров команд чаще всего встречаются имена файлов, подлежащих обработке, и ключи, уточняющие режим выполнения команды. Ключ чаще всего представляет собой букву, перед которой обычно ставится символ “/”. Параметры отделяются друг от друга пробелами.
Особую роль играют параметры перенаправления стандартных вывода и ввода: “>”, “>>” и “<”. Перенаправление стандартного вывода с помощью знака “>” означает, что те результаты работы команды или прикладной программы, которые обычно выводятся на экран монитора, должны направляться в тот файл или на то устройство, имя которого указано сразу после знака “>”. Из имен устройств чаще всего используется PRN – системный принтер или NUL – пустое устройство, которое означает, что результаты не должны никуда выводиться.
В качестве примера рассмотрим перенаправление стандартного вывода команды DIR. Обычно эта команда выводит на экран содержимое каталога, однако если команда задана в форме “DIR >PRN”, то это содержимое будет выдано на принтер, а в форме “DIR >DIRFILE.TXT” – в файл DIRFILE.TXT.
Параметр “>>” действует почти так же, как “>”, но при выводе в существовавший ранее файл знак “>” означает, что прежнее содержимое файла следует стереть, а знак “>>” – что новые данные должны добавляться в конец файла. Это позволяет накапливать в одном файле результаты выполнения нескольких команд. Параметр перенаправления стандартного ввода “<” используется в тех случаях, когда команда или программа, обычно принимающая данные с клавиатуры, должна взять их из указанного файла.
Парамеры перенаправления можно записывать в любом месте командной строки, но обычно их указывают в конце строки.
В некоторых случаях бывает удобно объединить вызовы двух или более команд в так называемый конвейер. Это возможно, если первая команда выдает данные на стандартный вывод, а вторая – принимает данные для обработки со стандартного ввода. В этом случае запись в одной строке двух команд, разделенных символом “|”, означает, что стандартный вывод первой команды будет сохранен во временном файле и затем использован в качестве стандартного ввода второй команды. Например, если команда “TYPE A.TXT” выводит на экран длинный текстовый файл, то конвейер “TYPE A.TXT | MORE” будет выдавать этот файл порциями, умещающимися на экране (см. описание команды MORE).
Если пользователь хочет в качестве параметра команды указать группу из нескольких файлов (которые нужно, например, скопировать на дискету или удалить), то он может использовать символы шаблона “*” и “?”. При этом символ “*” означает «любое количество любых символов, а может и ни одного», в то время как “?” означает «любой один символ». Таким образом, команда “DEL *.TMP” означает удаление всех файлов, имя которых заканчивается на “.TMP”.
В Windows NT имеется также возможность опускать имя запускаемой программы, указывая вместо этого имя файла, подлежащего обработке. Для этого следует предварительно установить ассоциацию между расширением имени файла и программой, которая должна вызываться для его обработки.
В приведенном ниже описании конкретных команд квадратные скобки “[…]” означают необязательные параметры команды, которые могут быть опущены. Сами квадратные скобки не используются при вводе команд.
Переменные среды
Каждая команда и программа, начиная с самого интерпретатора команд, получает при своем запуске от операционной системы в качестве как бы дополнительного неявного параметра область памяти, называемую средой илиокружением программы. Среда состоит из набора текстовых строк вида «переменная=значение». Здесь переменная должна состоять из букв и цифр, а значение – строка из любых символов, кроме нескольких специальных. Любая программа может запросить значения переменных своей среды и использовать эти значения в своей работе.
Имеется несколько стандартных системных переменных среды, которые всегда задаются при загрузке системы. К ним относятся:
COMSPEC – задает путь к каталогу, в котором находится файл интерпретатора команд CMD.EXE. Эта переменная используется системой при возврате в интерпретатор после завершения работы программы.
PROMPT – определяет вид строки приглашения к вводу следующей команды, выдаваемого интерпретатором.
PATH – содержит перечисление путей ко всем каталогам, в которых интерпретатор будет искать файл запускаемой программы, если задано только имя файла без указания пути.
Дополнительные переменные среды могут потребоваться для правильной работы различных прикладных программ. Пользователь вправе задавать переменные среды с любыми именами и использовать их по своему усмотрению для управления работой своих программ.
Для изменения системных переменных PATH и PROMPT предусмотрены одноименные команды. В общем случае для просмотра и изменения любых переменных среды может использоваться команда SET.
Очистка экрана.
CLS
Вывод или изменение даты
DATE [дата]
Команда DATE без параметров отображает текущую дату и запрашивает ввод новой даты. Для сохранения текущей даты нажмите клавишу ENTER.
Создание каталога
MKDIR [диск:]путь
MD [диск:]путь
Печать текстового файла
PRINT [/D:устройство] [[диск:][путь]имя_файла[...]]
/D:устройство Устройство для печати.
Удаление каталога
RMDIR [/S] [/Q] [диск:]путь
RD [/S] [/Q] [диск:]путь
/S - Удаление дерева каталогов, т. е. не только указанного каталога, но и всех содержащихся в нем файлов и подкаталогов.
/Q - Отключение запроса подтверждения при удалении дерева каталогов с помощью ключа /S.
Вывод или изменение времени
TIME [время]
Введите TIME без параметров для вывода текущего времени и запроса на ввод нового времени. Нажмите клавишу ENTER для сохранения текущего времени.
Запуск команд в указанное время
AT [\\имя_компьютера] [ [код] [/DELETE] | /DELETE [/YES]]
AT [\\имя_компьютера] время [/INTERACTIVE]
[ /EVERY:день[,...] | /NEXT:день[,...]] "команда"
Команда AT предназначена для запуска команд и программ в указанное время по определенным дням. Для использования команды AT необходимо, чтобы была запущена служба расписаний.
Работа с запланированными заданиями
SCHTASKS /параметр [аргументы]
Описание:
Позволяет администратору создавать, удалять, изменять и опрашивать запланированные задачи в локальной или удаленной системе. Заменяет AT.exe.
Завершение работы процесса
TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]]
{ [/FI <фильтр>] [/PID <процесс> | /IM <образ>] } [/F] [/T]
Эта команда позволяет завершить один или несколько процессов. Процесс может быть завершен по имени образа или по идентификатору процесса.
Вывод всех процессов
TASKLIST [/S <система> [/U <имя пользователя> [/P [<пароль>]]]]
[/M [<модуль>] | /SVC | /V] [/FI <фильтр>] [/FO <формат>] [/NH]
Описание:
Отображает список приложений и связанные с ними задачи/процессы, которые исполняются в текущий момент на локальном или удаленном компьютере.
Вывод содержимого одного или нескольких текстовых файлов
TYPE [диск:][путь]имя_файла
Вывод версии Windows
VER
Параметры пакетных файлов
В пакетных файлах могут использоваться различные параметры, играющие в «языке пакетных файлов» роль, подобную роли переменных в обычном языке программирования. Следует отметить, что значениями параметров могут быть только текстовые строки.
Позиционные параметры
Позиционные параметры %0, %1, ... %9 аналогичны формальным параметрам процедуры. При запуске пакетного файла параметр %0 замещается спецификацией самого запускаемого файла, как она задана в командной строке (т.е. с указанием диска и пути либо без таковых). Остальные параметры в порядке их номеров замещаются параметрами вызова пакетного файла, т.е. остальными частями командной строки с учетом разделителей (пробелов, запятых, точек с запятой и знаков равенства) и за вычетом параметров перенаправления. Последние несколько позиционных параметров могут при этом остаться пустыми. Параметры перенаправления переназначают стандартные ввод и вывод для пакетного файла, сами же из пакетного файла недоступны.
Пример. Пусть имеется команда запуска пакетного файла:
\MYDIR\BATCH1 F1.TXT>PRN,/F=25, DD E/E
При этом стандартный вывод для этой команды будет направлен на PRN, а позиционные параметры примут следующие значения:
%0=\MYDIR\BATCH1 %1=F1.TXT %2=/F %3=25 %4=DD %5=E/E
Параметр ERRORLEVEL
Любая программа для Windows при завершении своего выполнения передает операционной системе целочисленной значение, которое называется кодом завершения программы. По умолчанию код завершения равен 0, и это значение принято считать признаком нормального завершения, т.е. отсутствия каких-либо «нештатных ситуаций» при работе программы. Пользователь может предусмотреть выдачу любых значений кода завершения, при этом ненулевые коды завершения обычно означают, что в ходе работы программы произошли какие-то неприятности (например, не найден входной файл, неверный формат обрабатываемых данных и т.п.).
Если программа была запущена в диалоговом режиме, то значение кода ее завершения никак не используется, теряется. Если же программа запускалась из пакетного файла, то можно проверить значение кода завершения при помощи оператора IF ERRORLEVEL, формат которого описан ниже. Такая проверка позволяет разветвить ход дальнейшего выполнения пакетного файла в зависимости от кода завершения программы.
Оригинальное и очень полезное применение кода завершения связано с использованием команды CHOICE. Программа, вызываемая по этой команде, задает пользователю некоторый вопрос и предлагает на выбор нажать одну из нескольких клавиш в качестве ответа. После нажатия клавиши программа завершается, а код ее завершения указывает, какой из предложенных ответов был выбран пользователем. Таким образом достигается возможность выбрать один из нескольких путей дальнейшего выполнения пакетного файла по выбору пользователя.
Команды для пакетных файлов
В данном подразделе описаны команды консольного режима, которые обычно применяются только в составе пакетных файлов. Их использование в диалоге не запрещено, но, как правило, не имеет смысла.
Порядок выполнения работы
Лабораторная работа выполняется в лаборатории, оснащенной компьютерами с установленной ОС Windows. Студенты получают задание на написание пакетных файлов, изучают команды консольного режима по приведенному описанию, осваивают применение команд на практике, пишут и отлаживают пакетный файл, готовят отчет.
Отчет о лабораторной работе оформляется на бумаге в печатном или рукописном виде. На титульном листе указывается название работы и состав бригады. В отчете приводится формулировка задания, а также тексты разработанных пакетных файлов с необходимыми пояснениями.
Когда студенты готовы к сдаче работы, преподаватель дает им 2-3 задания на применение команд в диалоговом режиме, проверяет выполнение заданий, а затем проверяет отчет. При выполнении заданий разрешается пользоваться данным описанием, другой литературой или справочной системой Windows. Преподаватель может задать дополнительные вопросы, выясняя уровень освоения системы команд.
Не требуется заучивание наизусть всех описанных команд и тем более их ключей, более важно понимание основ консольного режима и умение быстро найти требуемую информацию в справочной системе.
Пример выполнения лабораторной работы
Задание. Написать и отладить пакетный файл, который получает в качестве параметров одно или несколько расширений имени файла и для каждого файла в текущем каталоге, имеющего одно из заданных расширений, выполняет одно из трех действий по выбору пользователя: удаляет файл, выдает его порциями на экран или пропускает без обработки.
Решение. Для выполнения поставленного задания можно использовать два приведенных ниже пакетных файла.
Файл Laba.bat:
@echo off
:loop
if (%1)==() goto Exit
for %%i in (*.%1) do call DoIt %%i
Shift
Goto loop
:Exit
Файл DoIt.bat:
choice /C:УВП /N Файл %1 (У - удалить, В - выдать, П - пропустить):
If errorlevel 3 goto Exit
If errorlevel 2 goto Type
w:st="on"del %1
Goto Exit
:Type
type %1 | more
:Exit
Задания на лабораторную работу.
1. Написать и отладить пакетный файл, который получает в качестве параметров дату, находит все файлы в каталоге с датой создания равной указной датой и выполняет действие по выбору пользователя: архивация файлов, удаление файлов. Информация о производимой операции должна выдаваться на экран.
2. Написать и отладить пакетный файл, который выдает перечень файлов из указанных пользователем каталогов удовлетворяющих условию: скрытый и системный. Выполняет с файлами операции: убрать скрытые и убрать системные.
3. Написать и отладить пакетный файл, который для всех файлов из указанного каталога создает подкаталоги с именем равной дате создания файла и переносит в эти каталоги файлы с указанной датой создания.
4. Написать и отладить пакетный файл, который по выбору пользователя переносит в архив или все файлы из каталога, формируя имя архива указанное пользователем, или всех каталогов. При этом не должно получаться вложенных архивов.
5. Написать и отладить пакетный файл, который по выбору пользователя будет завершать работу процессов.
6. Создать задание которое будет запускаться каждые 2-4-8-16 и. т. д. минут.
7. Написать и отладить пакетный файл, который по выбору даты пользователем будет архивировать все файлы в каталоге и подкаталогов двухнедельной давности.
8. Создать задание которое выведет список процессов компьютера занимающих от 1МБ до 10 МБ памяти.
9. Создать задание которое выведет список файлов начинающихся на s и созданных не позднее указанной пользователем даты.
10. Создать задание которое добавляет файлы из каталога к архиву текущей недели. Архивы более недели должны быть перенесены в другой каталог.
11. Создать задание которое при изменении размера файла, произведет его архивацию.
12. Создать назначенное задание реализующее следующий механизм создания резервного копирования данных в каталоге.
Данные представлены виде набора лог файлов и имеют расширения .log. Формат имени файла YYYYMMDD.log, где YYYY – год лог файла, MM- месяц, DD – день лог файла.
Необходимо ежедневно архивировать лог файлы с датой ранее 3 дней от текущей даты. Лог файлы должны создаваться по принципу:
1. Если не прошел месяц, то файлы просто архивируются за каждую дату и остаются в каталоге с логами
2. Если прошло более месяца и 3 дня, то все файлы за прошлый месяц должны быть с архивированы в один файл и переписаны в другой каталог.
3. Файлы за последние 3 дня не подлежат архивации.
4. * - Логи за субботу и воскресенье хранятся в отдельных файлах в отличие от всех остальных архивов.
Консольный режим и пакетные файлы в ОС Windows
Основные сведения
Консольный режим Windows
В ранних операционных системах ПЭВМ главным средством общения пользователя с системой являлся диалог, основанный на языке команд операционной системы. Пользователь вводит в текстовом режиме с клавиатуры команду, системный интерпретатор выполняет ее и выводит результаты на экран. Работа пользователя в современных операционных системах в основном протекает с использованием средств многооконного графического интерфейса, когда основные действия – переключение окон, вызов команд меню, запуск команд – выполняются с помощью мыши, а клавиатура используется во вспомогательных целях. Тем не менее, режим текстового диалога сохраняется и в ряде случаев предоставляет самый простой способ выполнить действия, которые иначе потребовали бы использования специальных системных утилит. Использование команд дает также удобную возможность выполнить некоторые действия сразу над группой файлов с использованием символов шаблона * и ?. Кроме того, из системных команд могут быть образованы пакетные файлы (в просторечии BAT-файлы), которые позволяют выполнять достаточно сложные последовательности действий для заданных аргументов.
Для того чтобы из графического режима перейти в режим текстового диалога, следует выбрать пункт меню Пуск/Выполнить и набрать имя файла интерпретатора команд CMD.EXE. Можно также запустить одну из программ-оболочек текстового режима (например, FAR.EXE), которые сохраняют возможность вводить команды операционной системы с клавиатуры.
Справочную информацию по любой команде Windows можно получить, введя соответствующую команду с ключом /?. Кроме того, команда HELP в Windows, введенная без параметров, выдает список всех команд, а с параметром – именем команды – информацию по данной команде.
Структура команды
Команда состоит из имени команды и параметров. Различают внутренние команды, которые выполняются самим интерпретатором, и внешние команды, которые представляют собой программы, расположенные в системном каталоге и ничем другим не отличающиеся от прочих программ.
Если интерпретатор команд не опознает команду как внутреннюю и не может найти ее имя среди выполняемых файлов в системных каталогах, он считает, что введено имя прикладной программы, которую следует запустить. Если перед именем программы не указан путь, то интерпретатор ищет программу в текущем каталоге (папке), в системных каталогах, а также в тех каталогах, пути к которым содержатся в системной переменной PATH. Заглавные и строчные буквы не различаются при поиске файла.
Если имя файла или каталога содержит пробелы или другие специальные символы, то его следует заключать в кавычки, например, "C:\Program Files\Far\Far.exe".
Среди параметров команд чаще всего встречаются имена файлов, подлежащих обработке, и ключи, уточняющие режим выполнения команды. Ключ чаще всего представляет собой букву, перед которой обычно ставится символ “/”. Параметры отделяются друг от друга пробелами.
Особую роль играют параметры перенаправления стандартных вывода и ввода: “>”, “>>” и “<”. Перенаправление стандартного вывода с помощью знака “>” означает, что те результаты работы команды или прикладной программы, которые обычно выводятся на экран монитора, должны направляться в тот файл или на то устройство, имя которого указано сразу после знака “>”. Из имен устройств чаще всего используется PRN – системный принтер или NUL – пустое устройство, которое означает, что результаты не должны никуда выводиться.
В качестве примера рассмотрим перенаправление стандартного вывода команды DIR. Обычно эта команда выводит на экран содержимое каталога, однако если команда задана в форме “DIR >PRN”, то это содержимое будет выдано на принтер, а в форме “DIR >DIRFILE.TXT” – в файл DIRFILE.TXT.
Параметр “>>” действует почти так же, как “>”, но при выводе в существовавший ранее файл знак “>” означает, что прежнее содержимое файла следует стереть, а знак “>>” – что новые данные должны добавляться в конец файла. Это позволяет накапливать в одном файле результаты выполнения нескольких команд. Параметр перенаправления стандартного ввода “<” используется в тех случаях, когда команда или программа, обычно принимающая данные с клавиатуры, должна взять их из указанного файла.
Парамеры перенаправления можно записывать в любом месте командной строки, но обычно их указывают в конце строки.
В некоторых случаях бывает удобно объединить вызовы двух или более команд в так называемый конвейер. Это возможно, если первая команда выдает данные на стандартный вывод, а вторая – принимает данные для обработки со стандартного ввода. В этом случае запись в одной строке двух команд, разделенных символом “|”, означает, что стандартный вывод первой команды будет сохранен во временном файле и затем использован в качестве стандартного ввода второй команды. Например, если команда “TYPE A.TXT” выводит на экран длинный текстовый файл, то конвейер “TYPE A.TXT | MORE” будет выдавать этот файл порциями, умещающимися на экране (см. описание команды MORE).
Если пользователь хочет в качестве параметра команды указать группу из нескольких файлов (которые нужно, например, скопировать на дискету или удалить), то он может использовать символы шаблона “*” и “?”. При этом символ “*” означает «любое количество любых символов, а может и ни одного», в то время как “?” означает «любой один символ». Таким образом, команда “DEL *.TMP” означает удаление всех файлов, имя которых заканчивается на “.TMP”.
В Windows NT имеется также возможность опускать имя запускаемой программы, указывая вместо этого имя файла, подлежащего обработке. Для этого следует предварительно установить ассоциацию между расширением имени файла и программой, которая должна вызываться для его обработки.
В приведенном ниже описании конкретных команд квадратные скобки “[…]” означают необязательные параметры команды, которые могут быть опущены. Сами квадратные скобки не используются при вводе команд.
Переменные среды
Каждая команда и программа, начиная с самого интерпретатора команд, получает при своем запуске от операционной системы в качестве как бы дополнительного неявного параметра область памяти, называемую средой илиокружением программы. Среда состоит из набора текстовых строк вида «переменная=значение». Здесь переменная должна состоять из букв и цифр, а значение – строка из любых символов, кроме нескольких специальных. Любая программа может запросить значения переменных своей среды и использовать эти значения в своей работе.
Имеется несколько стандартных системных переменных среды, которые всегда задаются при загрузке системы. К ним относятся:
COMSPEC – задает путь к каталогу, в котором находится файл интерпретатора команд CMD.EXE. Эта переменная используется системой при возврате в интерпретатор после завершения работы программы.
PROMPT – определяет вид строки приглашения к вводу следующей команды, выдаваемого интерпретатором.
PATH – содержит перечисление путей ко всем каталогам, в которых интерпретатор будет искать файл запускаемой программы, если задано только имя файла без указания пути.
Дополнительные переменные среды могут потребоваться для правильной работы различных прикладных программ. Пользователь вправе задавать переменные среды с любыми именами и использовать их по своему усмотрению для управления работой своих программ.
Для изменения системных переменных PATH и PROMPT предусмотрены одноименные команды. В общем случае для просмотра и изменения любых переменных среды может использоваться команда SET.