Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Rem добавим в архив arc. Bat все текстовые файлы из текущей папки↑ Стр 1 из 6Следующая ⇒ Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Теоретические основы
Командный интерпретатор
Интерфейс командной строки является мощным и гибким инструментом ре-шения широкого круга административных задач. Несмотря на то, что графиче-ский интерфейс ОС Windows кажется более удобным и эффективным для управ-ления ресурсами компьютера, использование командной строки выглядит пред-почтительнее при необходимости автоматизации или масштабирования задач ад-министрирования. При этом использование встроенных в операционную систему средств поддержки выполнения скриптов, таких как внутренние и внешние ко-манды, операторы, переменные, позволяет не прибегать к сторонним компилято-рам высокоуровневых языков для решения даже очень сложных задач – стандарт-ная поставка операционной системы содержит все необходимые инструменты.
Операционная система Windows поддерживает командный диалог с пользо-вателем с использованием командного интерпретатора или, иначе, оболочки ко-мандной строки (command shell). Его назначение – находясь в оперативной памя-ти принимать от оператора и выполнять команды. В Windows 9x, как и в MS-DOS, командный интерпретатор по умолчанию был представлен исполняемым файлом command.com. Начиная с версии Windows NT операционная система предоставля-ет пользователю альтернативный и более функциональный интерпретатор ко-
манд Cmd.exe.
Файл командного интерпретатора Cmd.exe в ОС Windows NT/2000/XP/Vista/7 находятся в каталоге %SystemRoot%\SYSTEM32, где пере-
менной среды %SystemRoot% соответствует путь к системному каталогу Windows). Запустить командный интерпретатор можно, послав на исполнение файл Cmd.exe любым доступным способом: из Проводника, файлового менедже-ра, пункта главного меню Выполнить… (Run). В результате откроется новое ок-но командного интерпретатора (рис.1), в котором можно запускать команды и ви-деть результат их выполнения.
Рисунок 1. Окно командной оболочки в Windows XP с результатом выполнения команды
vol.
Команды
Все команды, которые оператор может выполнить в окне интерпретатора Cmd.exe, делятся на внутренние и внешние. Внутренние команды распознаются самим интерпретатором. К ним относятся, например, cls – очистка экрана, time – просмотр и изменение текущего времени, dir – просмотр содержимого папки. Внешние команды оформлены как отдельные программы, которые по умолчанию находятся в той же папке, что и сам интерпретатор cmd.exe. Внешними являются, например, команды: xcopy – копирование файлов и каталогов, at – запуск про-грамм и команд в заданное время, cacls – просмотр и изменение прав доступа к файлам и папкам.
Рассмотрим общие принципы работы с командной строкой. В ответ на стандартное приглашение вида
полный путь к текущей папке >_
можно ввести имя команды с параметрами и ключами. Справку по конкретной команде можно получить в окне оболочки, если запустить команду с ключом /? (рис.2).
Рисунок 2. Вывод справки о работе команды копирования файлов copy
Детальное описание каждой команды не входит в объем настоящих методи-ческих указаний, но соответствующий справочник можно найти, например, в [5]. Список команд можно получить и в окне командной оболочки, выполнив команду help.
По умолчанию команды выводят результаты своего исполнения на экран монитора, и принимают входные данные с клавиатуры. Но это соглашение можно изменить и для этого служат операторы перенаправления.
Операторы перенаправления команд используются для изменения место-положений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие. Местоположение потоков ввода и вывода называется дескриптор. В таблице 1 описаны операторы перенаправления потоков ввода и вывода команд.
С использованием операторов перенаправления можно направить вывод результатов работы команды (скрипта) в заданный файл или использовать эти ре-зультаты в качестве входных параметров для выполнения другой команды
(скрипта). Это позволяет организовывать эффективную коммуникацию между процессами при минимальных затратах времени и ресурсов.
Таблица 1. Операторы перенаправления ввода/вывода команд
По умолчанию, входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, далее Cmd.exe отправляет выход-ные данные команды (дескриптор STDOUT) в окно командной строки. В сле-дующей таблице представлены доступные дескрипторы.
Таблица 2. Дескрипторы устройств ввода/вывода ОС Windows
Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска про-граммы и перенаправления любого из 10 дескрипторов используется интерпрета-тор команд Cmd.exe. Для задания требуемого дескриптора перед оператором пе-ренаправления введите его номер. Если дескриптор не определен, то по умолча-нию оператором перенаправления ввода «<» будет ноль (0), а оператором перена-правления вывода «>» будет единица (1). После ввода оператора «<» или «>» не-обходимо указать, откуда читать и куда записывать данные. Можно задать имя файла или любой из существующих дескрипторов. Для задания перенаправления
в существующие дескрипторы используется амперсанд (&), затем номер требуе-мого дескриптора (например, & номер_дескриптора). Например, для перенаправ-ления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите: 1>&2.
Например, чтобы сообщения об ошибках и результаты работы скрипта вы-водились в файл, подаем команду:
myScript.bat >res.txt 2>&1
Здесь сначала стандартный вывод перенаправляется в файл, а затем деск-риптор потока STDERR перенаправляется туда же, куда перенаправлен STDOUT. Если же поменять местами операции перенаправления:
myScript.bat 2>&1 1>res.txt
то STDERR будет сначала перенаправлен на поток STDOUT (консоль), а уже за-тем STDOUT перенаправляется в файл. В результате полезный вывод будет на-правлен в файл, а ошибки – на экран.
В операторах перенаправления вместо имени файла можно указывать стан-дартные обозначения устройств компьютера. В Windows поддерживаются сле-дующие имена устройств: PRN (принтер),LPT1–LPT3 (соответствующие парал-лельные порты), AUX (устройство, присоединяемое к последовательному порту 1), COM1–COM3 (соответствующие последовательные порты), CON (терминал: при вводе это клавиатура, при выводе - монитор), NUL (пустое устройство, все операции ввода/вывода для него игнорируются).
Примеры. Вывод в файл папки.txt списка всех папок из текущей папки dir /A:D /B >папки.txt
Вывод справки по команде tasklist в файл tasklist _hlp.txt tasklist /? > tasklist_hlp.txt
Дописать в файл check_connect.txt результат проверки IP-соединения с уз- лом www.volpi.ru ping www.volpi.ru >>check_connect.txt
Перенаправить сообщения об ошибках работы команды в файл error.txt taskkill /s comp1 /pid 1022 2>error.txt
Сменить дату на 1.1.2013 echo 1.1.2013 | date
В последнем примере использован оператор конвейеризации |. С его помо-щью можно сообщения, выводимые первой командой, передавать в качестве входных данных для второй команды. В данном случае в качестве входных дан-ных для команды date, ожидающей на входе значение новой даты в формате дд.мм.гггг,использован вывод первой команды(echo),которая выводит на экранзаданную строку-параметр. Если заранее записать новую дату в файл date.txt, то изменение даты возможно и такой командой:
date < date.txt
Оператор конвейера наиболее эффективен в комбинации с фильтрующими командами. Команды-фильтры дают возможность сортировать, просматривать и отбирать часть выходной информации других команд. Фильтры делят, переупо-рядочивают или выделяют отдельные части из проходящей через них информа-ции. В приведенной ниже таблице перечислены команды-фильтры, доступные в
ОС Windows.
Для направления данных из файла на вход фильтра используется символ «меньше» (<). Для направления на вход фильтра выхода другой команды исполь-зуется канал (|).
Команда more выводит содержимое файла или выхода команды в одном окне командной строки за раз. Например, чтобы отобразить содержимое файла List.txt в одном окне командной строки за раз, введите следующую команду: more list.txt (или more < list.txt).Отображается одно окно командной строки со сведе-ниями, а затем в нижней части окна командной строки отображается строка -- More --. Для перехода к следующему окну командной строки,нажмите любуюклавишу Пробел, для вывода следующей строки нажмите Enter, для остановки просмотра следует нажать клавишу q (полный список доступных клавиш см. в справке). Команда more полезна при работе с командами, создающими выход бо-лее одного окна командной строки. Например, при выводе дерева каталогов жест-кого диска. Если на диске содержится больше каталогов, чем может быть одно-временно выведено в окне командной строки, можно использовать команду tree с каналом (|) и команду more. tree c:\ | more На экран будет выведен первое окно командной строки с выходом команды tree, а затем отобразится строка -- More --.
Команда find проводит поиск заданной строки или текста в файлах. Ко-манда Cmd.exe отображает каждую строку, которая совпадает со строкой или тек-стом, указанным в окне командной строки. Чтобы использовать команду find в качестве команды-фильтра, необходимо включить символ «меньше» (<) и строку или текст, которые надо искать либо использовать команду ”канал”. Например, команда dir | find ”.2012” отфильтрует в выводе команды dir все файлы и папки, в строках описания которых встречается строка.2012 (созданные в 2012 году). Необходимо также помнить, что по умолчанию при поиске команда find учитыва-ет регистр.
Команда sort выполняет сортировку по алфавиту текстового файла или вывода команды. Например, следующая команда сортирует содержимое файла List.txt и отображает результаты в окне командной строки: sort < list.txt В этом примере команда sort сортирует строки файла List.txt в алфавитном порядке и вы-водит результат на экран без изменения файла. Для сортировки вывода команды следует ввести команду, затем символ канала (|) и команду sort (команда | sort). Например, следующая команда сортирует в алфавитном порядке все запущенные
процессы tasklist | sort. Команда sort имеет ряд параметров. Например, в таком варианте:
dir | sort /+6
сортировка будет осуществляться начиная с 7-го символа (+6 – пропустить пер-вые 6). В выводе команды dir с 7-й позиции начинается год создания файлов и па-пок, следовательно, команда выведет содержимое текущей папки, отсортирован-ной по годам.
Зачастую решение некоторой практической задачи предполагает выполне-ние нескольких команд. В этом случае их объединяют в специальные командные файлы, но о них речь пойдет позже. Windows предоставляет возможность объеди-нять несколько команд в одной строке, допуская их последовательное выполне-ние, а также разрешая обуславливать выполнение одних команд результатами вы-полнения других.
Таблица 4. Операторы условного выполнения команд
Примеры.
Вывести на экран содержимое корневой папки диска C:, дождаться нажа-тия клавиши (команда pause), вывести на экран содержимое корневой папки диска
D:. dir c:\ & pause & dir d:\
Проверить IP-соединение с узлом www.volpi.ru и если соединения нет вы-вести на экран текущие параметры сети TCP/IP. ping www.volpi.ru || ipconfig /all
Если в корне диска d: есть файлы с расширением txt, скопировать их в папку tmp, а сами файлы удалить dir d:\*.txt && (xcopy d:\*.txt d:\tmp & del d:\*.txt)
В последнем примере использована группировка команд и в случае ус-пешного выполнения команды dir (файлы с заданной маской найдены), выпол-нятся сразу две команды – копирования файлов xcopy и удаления файлов del.
Командные файлы
Представленные в последней таблице операторы являются средствами группировки команд с элементами программирования. Но гораздо эффективнее с задачей компоновки последовательности команд в алгоритмически упорядочен-ную программу-скрипт можно справиться, создав командный файл.
Командный файл представляет собой обычный текстовый файл с расшире-нием bat (или cmd), в который можно поместить последовательность команд опе-рационной системы, а также ряд инструкций для формирования основных алго-ритмических структур последовательного выполнения, ветвления и циклического повторения. Таким образом, командный файл имеет сходство с программами на интерпретируемых алгоритмических языках программирования, но для его ис-полнения не требуется установки среды программирования или дополнительного интерпретатора, достаточно интерпретатора cmd.exe.
В простейшем случае в командный файл можно записать несколько ко-манд, и они будут выполнены последовательно, друг за другом. Пусть, например, файл arc.bat содержит следующий набор инструкций. d: cd d:\tmp
d:\winrar\rar a arc.rar *.txt del *.txt
Если запустить на выполнение файл arc.bat, то он поместит в архив arc.rar все текстовые файлы из папки tmp, а затем удалит эти файлы. Теперь можно на-строить (например, с помощью команды at) ежедневный или еженедельный за-пуск этого командного файла в определенное время, и папка d:\tmp не будет пере-полняться текстовыми файлами. Так можно выполнять командный файл arc.bat каждую субботу в 6:00:
At 6:00 /every:s arc.bat
Таким образом, командные файлы являются удобным средством автомати-зации выполнения рутинных задач администрирования. Как уже говорилось, воз-можности командных файлов шире, чем простое перечисление последовательно выполняемых команд. Об основных возможностях командных файлов речь пой-дет ниже, здесь же отметим возможность добавлять комментарии в тексты скрип-тов командных файлов. Строки-комментарии должны начинаться с ключевого слова rem и позволяют на естественном языке внести пояснения в текст скрипта. Пример:
ECHO сообщение
Например, ECHO Привет! Если командный файл исполняется в русифицированной версии Windows, то необходимо учитывать, что в среде командного процессора символы нацио-нального алфавита используются в DOS-кодировке. Для переключения между ко-довыми страницами Windows и DOS используется команда CHCP номер страницы Переменные среды
В командном файле имеется возможность работать с переменными среды, которые можно назвать отдаленными аналогами обычных переменных алгорит-мических языков программирования. Переменные среды хранятся в памяти, име-ют уникальные идентификаторы, с помощью которых к ним можно обращаться, и
хранят информацию в строковом виде. Принимаемые значения этих переменных
формируются при загрузке, регистрации пользователя в системе, старте или завер-шении некоторых приложений, а также в сеансе работы с окном командной оболоч-ки.
В Windows различаются два вида переменных среды: переменные среды операционной системы (системные переменные)и переменные среды текущего
пользователя.
Системные переменные среды определяются операционной системой и имеют одни и те же значения, для всех пользователей. Например: переменные comspec (полный путь к командному интерпретатору, comspec=C: \WINDOWS\system32\cmd.exe), os (название операционной системы, os=windows_NT), SystemRoot (системный каталог операционной системы), Path (определяет пути, которые система проверяет при поиске запущенных программ и команд). Добавлять новые системные переменные или изменять значения сущест-вующих могут члены группы администраторов.
Переменные среды текущего пользователя могут иметь разные значения для каждого пользователя на конкретном компьютере. В число таких переменных входят переменные, определяемые в приложениях (например, путь к каталогу, в котором сохраняются файлы приложений).
Переменные среды операционной системы и конкретного пользователя можно увидеть и изменить в диалоговом окне «Переменные среды» из вкладки «Дополнительно» окна свойств для значка «Мой компьютер» (рис. 3).
Из командной строки с переменными среды можно работать с использо-ванием команды set.
Когда открывается новое окно командного интерпретатора, переменные среды обоих типов копируются в переменные среды этого командного окна. При этом копирование происходит в следующем порядке: 1- Переменные среды операционной системы. 2- Переменные среды пользователя.
3- Переменные из файла %systemRoot%\SYSTEM32\autoexec.nt.
В сеансе работы с окном командной оболочки оператор может добавлять новые переменные среды с использованием команды set. При этом все добавлен-ные в сеансе переменные среды действительно лишь для этого сеанса и теряются после закрытия окна.
Рисунок 3. Графический интерфейс доступа к переменным среды
Если запустить команду set без параметров, то в окне отобразятся значения всех переменных среды для текущего сеанса командного окна.
Для определения новой переменной среды команду set необходимо ис-пользовать в виде: SET переменная=строка
где переменная - имя новой (или переопределяемой) переменной среды, а стро-ка задаетстроку символов,присваиваемую указанной переменной.
Например, командная строка SET FileName=tmp.dat
создает переменную FileName, принимающую значение tmp.dat.
Значение, присвоенное какой-либо переменной, доступно для обработки в ко-мандных файлах, при использовании ее имени, заключенного в знаки процента - %. Например команда выдачи текста на дисплей ECHO в виде:
One two
Еще одна интересная возможность – копирование подстроки. Для этого команду set необходимо вызывать в виде:
set переменная1=%переменная2: ~m,n%
Эта команда возьмет значение второй указанной переменной (переменная2), вырежет из него подстроку длиной n символов начиная с (m+1)-гo и запишет ре-зультат в первую переменную (переменная1). @echo off
set d=12.12.2012 set month=%d:~3,2% set year=%d:~6,4% set hour=%time:~0,2% echo %month%
echo %year% echo %hour%
Значением переменной month будет значение месяца, а year - года из даты, хранящейся в переменной d в формате dd.mm.yyyy. Значение переменной hour выделяем из переменной окружения %time%.
Зачастую информация, подлежащая хранению и обработке, должна быть представлена в числовом виде. Например, если потребуется подсчитать суммар-
ный размер, занимаемый файлами в папке, или для подсчета количества запущен-ных процессов. В этом случае команду set необходимо использовать с ключом /A.
set /А переменная=выражение
Использование ключа /A означает, что стоящая справа от знака равенства строка является числовым выражением, значение которого необходимо вычис-лить. Численные значения для команды set — это десятичные числа, кроме чисел с префиксами 0x для шестнадцатеричных чисел и 0 для восьмеричных чисел. Та-ким образом число 20 можно представить как 0x14 и 024.
Например, если задать команду
SET /А Sum=5+6
то значение переменной Sum будет равно одиннадцати.
Все операторы, поддерживаемые командой set, приведены в таблице 6. Строки таблицы отсортированы в порядке убывания приоритета.
Таблица 6. Операторы, поддерживаемые при арифметических вычислени-ях командой set.
В связи с тем, что такие знаки как % >> << & | функционально ”перегру-жены” (используются для обозначения нескольких операций в разных контекстах использования), то при их использовании необходимо заключить строку выраже-ния в кавычки.
Если в выражении встречается строка, не являющаяся числовой лексемой, то оно будет интерпретирована как имя переменной среды, команда set преобра-зует ее значение в числовую форму и использует в выражении для формирования результата. Если в выражении используется переменная с именем, не определен-ным в текущем сеансе командной строки или это значение не может быть преоб-разовано в числовую форму, то вместо нее подставляется нулевое значение. Это позволяет использовать переменные среды в арифметических выражениях без об-рамления их имен знаками %. Следующий пример иллюстрирует выполнения арифметических операций с переменными среды.
@echo off set a=5 set b=25
set /a c=b/a+tmpVar set c
В результате выполнения новой переменной среды c будет присвоено зна-чение 5, и на экран будет выведено ее значение (а также всех переменных среды,
начинающихся с символа с). Переменная tmpVar не была определена, поэтому ее значение при вычислении значения выражения будет принято за 0.
Значение переменной можно задать и как результат работы команды. Так можно получить серийный номер тома текущего диска:
@echo off
vol | find “:” >out.tmp set /p var= <out.tmp set serial=%var:~22,9% del out.tmp
echo %serial%
Shift /3
сдвинет %4 на %3, % 5 на %4 и т. д. %0, %1 и %2 останутся неизменными. Если в командной строке задано больше десяти параметров, то команду
shift можно использовать несколько раз.
Для практических случаев использования командных файлов нередки слу-чаи, когда в качестве параметров им передаются имена файлов и папок. В этом случае в командном файле может встать проблема выделения из этого имени со-ставляющих частей – названия диска, пути, непосредственно имени или расшире-ния файла. Для автоматического выделения подобных объектов можно использо-вать операторы, перечисленные в таблице 7.
Например, всегда можно узнать, с какого диска был запущен командный
файл:
echo %~D0
Комбинируя операторы из таблицы 7, можно получать составные конст-рукции:
%~DPn — из переменной %n выделяется имя диска и путь, %~NXn — из переменной %n выделяется имя файла и расширение Команда
ren %1 %~N1_old%~X1
переименует файл, имя которого передается в качестве параметра, дописав к име- ни файла _old: file.dat переименуется в file_old.dat.
PAUSE DEL d:\work\*.*
Для того, чтобы пользователь мог задать значение переменной с клавиату-ры используется команда set с ключом /p:
SET /P имя переменной = текст
Пользователю будет выведен текст-приглашение и командный файл пе-рейдет в режим ожидания ввода с клавиатуры. Введенная строка заносится в пе-ременную среды.
set /p Folder=Введите имя папки
Еще одну интересную возможность – делать выбор одного из альтернатив-ных вариантов, предоставляет команда choice.
Команды передачи управления
Последовательное выполнение команд в командном файле можно прервать несколькими способами. Во-первых, можно использовать команду перехода Goto метка
Эта, табуированная в языках высокого уровня, команда в условиях слабо структурируемых командных файлов используется довольно часто. Метка, на ко-торую осуществляется переход по этой команде, оформляется следующим обра-зом: :метка
Очевидно, что безусловный переход должен быть обусловлен командой if, иначе не выполнятся команды, помещенные между командой перехода и меткой в случае перехода вперед или произойдет зацикливание при переходе назад. В ка-честве метки перехода можно указывать строку :eof, которая передает управление в конец текущего пакетного файла:
@ЕСНО OFF
Test.bat par1 par2 par3
Но при последнем вызове после окончания работы командного файла test.bat управление не будет возвращено в вызывавший командный файл, а, следо-вательно, не будут выполнены все следующие за командой вызова инструкции. Вызов же командой call позволяет по окончании работы вызванного командного файла вернуться в вызвавший и продолжить его выполнение.
В качестве адресата вызова команды call допустимо использовать метки внутри текущего командного файла:
CALL:метка аргументы
При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами и управление передается на инструкцию, распо-ложенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза завершить его работу, достигнув конца командного скрипта или вызвав команду exit /b (ключ /b позволяет завершить работу лишь командного файла, а не сеанса оболочки). При этом первый выход будет означать возврат управления на инструкцию, расположенную сразу после строки call, а второй выход заверша-ет выполнение пакетного файла. Такое поведение команды call позволяет оформ-лять фрагменты кода в виде подпрограмм:
Call:proc1 par1 par2 ...
:proc1 rem Здесь %0=:proc1 %1=par1 %2=par2 ... Exit /b
...
Команды перехода Организация ветвлений алгоритмов в зависимости от выполнения или не-
выполнения того или иного условия является одной из популярнейших структур-ных конструкций при написании программ на большинстве языков программиро-вания. Не стал исключением и язык командных файлов. Для организации перехо-да по условию здесь может быть использована команда if. Ниже представлены все возможные варианты вызова этой команды.
if [/i] [not] строка1 == строка2 команда [else команда ] if [not] errorlevel число команда [else команда ]
if [not] exist имя_файла к |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-16; просмотров: 619; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.57.239 (0.012 с.) |