Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

деск- Числовой эквива- Описание  
 
риптор лент дескриптора  
   
STDI   Ввод с клавиатуры  
N  
     
       
STDO   Вывод в окно командной строки  
UT  
     
       
STDE   Приемник сообщений об ошибках при  
RR выполнении команд  
   
       
UND   Эти дескрипторы определяются индиви-  
3-9 дуально для каждой прикладной про-  
EFINED  
  граммы.  
     
       

 

Номера от 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.

 

  Таблица 3. Команды-фильтры  
Команда Описание  
more Отображает содержимое файла или вывода команды в одном окне  
командной строки за раз.  
     
find Поиск указанных символов в файлах или выводе команды.  
     
findstr Поиск образцов текста в файлах с использованием регулярных  
выражений  
     
sort Сортировка файлов или вывода команды по алфавиту.  
     

Для направления данных из файла на вход фильтра используется символ «меньше» (<). Для направления на вход фильтра выхода другой команды исполь-зуется канал (|).

 

Команда 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. Операторы условного выполнения команд

Символ Синтаксис Определение    
   
    Используется для разделения несколь-    
& команда1 & команда2 ких команд в одной командной строке.    
В Cmd.exe выполняется первая коман-    
    да, затем вторая команда.    
         
    Запускает команду, стоящую за сим-    
    волом &&, только если команда,    
    стоящая перед этим символом была    
&& команда1 && команда2 выполнена успешно. В Cmd.exe вы-    
полняется первая команда. Вторая ко-    
    манда выполняется, только если пер-    
    вая была выполнена успешно (если    
    переменная окружения errorlevel=0).    
         
    Запускает команду, стоящую за сим-    
    волом ||, только если команда, стоящая    
    перед символом || была выполнена с    
    ошибкой. В Cmd.exe выполняется    
|| команда1 || команда2 первая команда. Вторая команда вы-    
    полняется, только если первая была    
    выполнена c ошибкой (полученный    
    код ошибки errorlevelпревышает    
    ноль).      
           
() (команда1 & команда2) Используется для группировки или    
вложения команд.    
           

 

Примеры.

 

Вывести на экран содержимое корневой папки диска 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.

 

  Таблица 7 - Операторы для заменяемых параметров
Операторы Описание
%~Fn Переменная %n расширяется до полного имени файла
   
%~Dn Из переменной %n выделяется только имя диска
   
%~Pn Из переменной %n выделяется только путь к файлу
   
%~Nn Из переменной %n выделяется только имя файла
   
%~Xn Из переменной %n выделяется расширение имени файла
   
%~Sn Значение операторов N и X для переменной %n изменяется так, что
  они работают с кратким именем файла
   
%~Tn Дата и время создания файла
   
%~Zn Размер файла
   
%~An Атрибуты файла
   
%~$PATH:n Проводится поиск по каталогам, заданным в переменной сре-
  ды PATH, и переменная %n заменяется на полное имя первого най-
  денного файла. Если переменная PATH не определена или в резуль-
  тате поиска не найден ни один файл, эта конструкция заменяется на
  пустую строку. Переменную PATH можно заменить на любое другое
  допустимое значение
   

 

Например, всегда можно узнать, с какого диска был запущен командный

 

файл:

 

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 Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.190.231 (0.01 с.)