![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Rem добавим в архив arc. Bat все текстовые файлы из текущей папкиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Теоретические основы
Командный интерпретатор
Интерфейс командной строки является мощным и гибким инструментом ре-шения широкого круга административных задач. Несмотря на то, что графиче-ский интерфейс ОС 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 используется команда
Переменные среды
В командном файле имеется возможность работать с переменными среды, которые можно назвать отдаленными аналогами обычных переменных алгорит-мических языков программирования. Переменные среды хранятся в памяти, име-ют уникальные идентификаторы, с помощью которых к ним можно обращаться, и
хранят информацию в строковом виде. Принимаемые значения этих переменных
формируются при загрузке, регистрации пользователя в системе, старте или завер-шении некоторых приложений, а также в сеансе работы с окном командной оболоч-ки.
В 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; просмотров: 628; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.89.175 (0.016 с.) |