IF – оператор условного выполнения команд в пакетном файле Windows

If – оператор условного выполнения команд в пакетном файле windows

Формат командной строки:


IF [NOT] ERRORLEVEL число команда

IF [NOT] строка1==строка2 команда

IF [NOT] EXIST имя_файла команда

Параметры:

NOT – Указывает, что Windows должна выполнить эту команду, только если условие является ложным.

ERRORLEVEL число – Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.

строка1==строка2 – Условие является истинным, если указанные строки совпадают.

EXIST имя_файла – Условие является истинным, если файл с указанным именем существует.

команда – Задает команду, выполняемую при истинности условия. За этой командой может следовать ключевое слово ELSE. В случае, если указанное условие ложно,
будет выполнена команда, находящаяся после слова ELSE.

Предложение ELSE должно располагаться в той же строке, что и команда, следующая
за ключевым словом IF. Например:


IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)

Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться
переходом на новую строку:

IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. Missing

Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна
располагаться в той же строке, что и команда, следующая за IF:


IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. missing

Вот правильный пример, где все команды расположены в одной строке:

IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. Missing

Изменение команды IF при включении расширенной обработки команд:


IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда

где оператор_сравнения принимает следующие значения:

EQU – равно
NEQ – не равно
LSS – меньше
LEQ – меньше или равно
GTR – больше
GEQ – больше или равно,

а ключ /I, если он указан, задает сравнение текстовых строк без учета
регистра. Ключ /I можно также использовать и в форме строка1==строка2
команды IF. Сравнения проводятся по общему типу данных, так что если
строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа,
после чего выполняется сравнение чисел.

Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение
сравнивается с внутренним номером версии текущей реализации расширенной
обработки команд. Первая версия имеет номер 1. Номер версии будет
увеличиваться на единицу при каждом добавлении существенных возможностей
расширенной обработки команд. Если расширенная обработка команд отключена,
условие CMDEXTVERSION никогда не бывает истинно.

Условие DEFINED применяется подобно условию EXIST, но принимает в качестве
аргумента имя переменной среды и возвращает истинное значение, если эта
переменная определена.

Строка %ERRORLEVEL% будет развернута в строковое представление текущего
значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется
переменная среды с именем ERRORLEVEL; в подобном случае подставляется
значение этой переменной. Например, с помощью данной строки можно выполнить
следующее:


goto answer%ERRORLEVEL%
:answer0
echo Получен код возврата 0
:answer1
echo Получен код возврата 1

Допускается и применение описанных выше операторов числового сравнения:


IF %ERRORLEVEL% LEQ 1 goto okay

Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную
CMD.EXE до любой обработки, за исключением ситуации, когда уже определена
переменная среды с именем CMDCMDLINE; в подобном случае подставляется
значение этой переменной.

Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой
текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется
переменная среды с именем CMDEXTVERSION; в подобном случае подставляется
значение этой переменной.

Примеры использования:

Loops

В главе, посвященной принятию решений, мы увидели утверждения, которые последовательно выполнялись одно за другим. Кроме того, реализации также могут быть выполнены в пакетном скрипте, чтобы изменить поток управления в логике программы. Затем они классифицируются в поток контрольных операторов.

В Batch Script нет прямого оператора while, но мы можем очень легко реализовать этот цикл, используя оператор if и метки.

Конструкция «FOR» предлагает возможности зацикливания для пакетных файлов. Ниже приведена общая конструкция оператора for для работы со списком значений.

Оператор for также может перемещаться по диапазону значений. Ниже приводится общая форма заявления.

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

Summary

We have discussed techniques for binary logic in batch files.Though there is a full set of operators available for binary math, they are lacking for logical conditions.This page shows how to translate these conditions to 0 (FALSE) or 1 (TRUE) and use binary math to get the logical results.

  • For simple AND statements (2 conditions) without ELSE clause, use nested IF statements.
  • In every other case, use temporary variables, and optionally binary math.

The basics: if

To test if a condition is true, IF is used:

IF EXIST filename ...
IF %value% LSS 10 ...
IF /I NOT "%string1%"=="string2" ...
IF NOT ERRORLEVEL 1 ...

Unfortunately, there is no such thing as IF %1 LSS 10 AND %2 GTR 0 … so we’ll have to emulate the missing operators.

The or operator

Often the OR operator can be replaced by AND and NOT operaters: if condition 1 OR condition 2 must be true, you may also say that NOT condition 1 AND NOT condition must be false.An example: we want to replace the AND operator in the previous example by the OR operator, i.e.

Арифметические операторы

Язык пакетного сценария поддерживает обычные арифметические операторы, как и любой язык. Ниже приведены доступные арифметические операторы.

Показать пример

оператор Описание пример
Добавление двух операндов 1 2 даст 3
Вычитает второй операнд из первого 2 – 1 даст 1
* Умножение обоих операндов 2 * 2 даст 4
/ Разделение числителя по знаменателю 3/2 даст 1,5
% Оператор модуля и остаток после целочисленного деления 3% 2 даст 1

Битовые операторы

Побитовые операторы также возможны в пакетном скрипте. Ниже приведены доступные операторы.

Показать пример

оператор Описание
& Это побитовый оператор «и»
| Это побитовый оператор «или»
^ Это побитовый «xor» или Exclusive или оператор

Ниже приведена таблица истинности, демонстрирующая этих операторов.

п Q P & Q р | Q р ^ д
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Версии windows

Если вы собираетесь распространять свои пакетные файлы на другие компьютеры, на которых может работать или не работать одна и та же версия Windows, вам необходимо протестировать свои пакетные файлы в максимально возможном количестве версий Windows.

В следующем примере показано, как проверить различные версии операционной системы, чтобы проверить соответствующие версии Windows.

Вызов внешних командных файлов

Из одного командного файла можно вызвать другой, просто указав его имя. Например:

Однако в этом случае после выполнения вызванного файла управление в вызывающий файл не передается, то есть в приведенном примере команда

(и все следующие за ней команды) никогда не будет выполнена.

Для того, чтобы вызвать внешний командный файл с последующим возвратом в первоначальный файл, нужно использовать специальную команду CALL файл

Например:

В этом случае после завершения работы файла f.bat управление вернется в первоначальный файл на строку, следующую за командой CALL (в нашем примере это команда COPY A:*.* C: ).

Логические операторы

Логические операторы используются для оценки булевых выражений. Ниже приведены доступные логические операторы.

Пакетный язык оснащен полным набором булевых логических операторов, таких как AND, OR, XOR, но только для двоичных чисел. Также нет никаких значений ИСТИНА или ЛОЖЬ. Единственным логическим оператором, доступным для условий, является оператор NOT.

Показать пример

оператор Описание
А ТАКЖЕ Это логический оператор «и»
ИЛИ ЖЕ Это логический оператор «или»
НЕ Это логический оператор «не»

Локальные и глобальные переменные

В любом языке программирования есть возможность пометить переменные как имеющие какую-то область видимости, то есть раздел кода, к которому они могут быть доступны. Обычно переменная, имеющая глобальную область видимости, может быть доступна из любой точки программы, тогда как локальные переменные имеют определенную границу, в которой они могут быть доступны.

В сценариях DOS также есть определение для локальных и глобальных переменных. По умолчанию переменные являются глобальными для всего сеанса командной строки. Вызовите команду SETLOCAL, чтобы сделать переменные локальными для области действия вашего скрипта.

После вызова SETLOCAL любые переменные возвращаются после вызова ENDLOCAL, вызова EXIT или когда выполнение достигает конца файла (EOF) в вашем сценарии. В следующем примере показано различие, когда в сценарии установлены локальные и глобальные переменные.

Модификация пакетных файлов

Ниже приведены шаги для изменения существующего командного файла.

  • Шаг 1 – Откройте проводник Windows.

  • Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

  • Шаг 3 – Щелкните правой кнопкой мыши файл и выберите пункт «Редактировать» в контекстном меню. Файл откроется в Блокноте для дальнейшего редактирования.

Шаг 1 – Откройте проводник Windows.

Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

Шаг 3 – Щелкните правой кнопкой мыши файл и выберите пункт «Редактировать» в контекстном меню. Файл откроется в Блокноте для дальнейшего редактирования.

:/>  Обзор HDDScan — программы для диагностики носителей информации

Оператор if командная строка, операторы сравнения

Кроме оператора сравнения “==” можно использовать и другие операторы для проверки условия:

  • equ «Равно». Дает True, если значения равны
  • neq «Не равно». Дает True, если значения не равны
  • lss «Меньше». Дает True, если зпачение1 меньше, чем значение2
  • lcq «Меньше или равно». Дает True, если значепие1 равно или меньше, чемзначение2
  • gtr «Больше». Дает True, если значение1 больше, чем значение2
  • geq «Больше или равно». Дает True, если значепие1 равно или больше, чем значение2

В этой статье мы рассмотрели условный оператор командной строки if.

Операторы отношений

Реляционные операторы позволяют сравнивать объекты. Ниже представлены реляционные операторы.

Показать пример

оператор Описание пример
EQU Проверяет равенство между двумя объектами 2 экв 2 даст верный
NEQ Проверяет разницу между двумя объектами 3 NEQ 2 даст истинное
LSS Проверяет, является ли левый объект меньше правого операнда 2 LSS 3 даст правду
LEQ Проверяет, является ли левый объект меньше или равен правому операнду 2 LEQ 3 даст истинное
GTR Проверяет, является ли левый объект больше правого операнда 3 гтп 2 даст верный
GEQ Проверяет, является ли левый объект больше или равен правому операнду 3 GEQ 2 даст истинное

Операторы перехода

Командный файл может содержать метки и команды GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается при обработке командного файла как метка. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Приведем пример.

Пусть имеется командный файл следующего содержания:

После того, как в этом файле мы доходим до команды

его выполнение продолжается со строки

В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).

Также для перехода к метке внутри текущего командного файла кроме команды GOTO можно использовать и рассмотренную выше команду CALL:

При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза достичь его конца. Первый выход возвращает управление на инструкцию, расположенную сразу после строки CALL, а второй выход завершает выполнение пакетного файла. Например, если запустить с параметром “Копия-1” командный файл следующего содержания:

то на экран выведутся три строки:

Таким образом, подобное использование команды CALL очень похоже на обычный вызов подпрограмм (процедур) в алгоритмических языках программирования.

Операторы присваивания

Язык Batch Script также предоставляет операторы присваивания. Ниже приведены доступные операторы присваивания.

Показать пример

оператор Описание пример
= Это добавляет правый операнд к левому операнду и присваивает результат левому операнду

Set / A a = 5

а = 3

Выход будет 8

знак равно Это вычитает правый операнд из левого операнда и присваивает результат левому операнду

Set / A a = 5

а – = 3

Выход будет 2

знак равно Это умножает правый операнд на левый операнд и присваивает результат левому операнду

Set / A a = 5

а * = 3

Выход будет 15

знак равно Это делит левый операнд с правым операндом и присваивает результат левому операнду

Set / A a = 6

а / = 3

Выход будет 2

знак равно Это берет модуль, используя два операнда и присваивает результат левому операнду

Set / A a = 5

% = 3

Выход будет 2

Set / A a = 5

а = 3

Выход будет 8

Set / A a = 5

а – = 3

Выход будет 2

Set / A a = 5

а * = 3

Выход будет 15

Set / A a = 6

а / = 3

Выход будет 2

Set / A a = 5

% = 3

Выход будет 2

Определение функции

В пакетном скрипте функция определяется с помощью оператора метки. Когда функция вновь определена, она может принимать одно или несколько значений в качестве входных «параметров» для функции, обрабатывать функции в основном теле и передавать значения в функции в качестве выходных «возвращаемых типов».

Каждая функция имеет имя функции, которое описывает задачу, которую выполняет функция. Чтобы использовать функцию, вы «вызываете» эту функцию с ее именем и передаете ее входные значения (известные как аргументы), которые соответствуют типам параметров функции.

Ниже приведен синтаксис простой функции.

:function_name 
Do_something 
EXIT /B 0
  • Имя_функции – это имя, данное функции, которое должно иметь некоторое значение, чтобы соответствовать действию функции.

  • Оператор EXIT используется для обеспечения правильного выхода из функции.

Имя_функции – это имя, данное функции, которое должно иметь некоторое значение, чтобы соответствовать действию функции.

Оператор EXIT используется для обеспечения правильного выхода из функции.

Ниже приведен пример простой функции.

Пакетный скрипт – код возврата

По умолчанию, когда выполнение командной строки завершено, оно должно либо возвращать ноль, если выполнение завершается успешно, либо ненулевое, если выполнение не выполняется. Когда пакетный скрипт возвращает ненулевое значение после сбоя выполнения, ненулевое значение будет указывать, что такое номер ошибки.

Ниже приведены общий код выхода и их описание.

Пакетный скрипт – массивы

Массивы не определены как тип в пакетном скрипте, но могут быть реализованы. Следующие вещи необходимо отметить, когда массивы реализованы в Batch Script.

  • Каждый элемент массива должен быть определен командой set.
  • Цикл ‘for’ потребуется для перебора значений массива.

Пакетный скрипт – обзор

Пакетный сценарий включен для автоматизации последовательностей команд, которые повторяются по своей природе. Сценарии – это способ, с помощью которого можно облегчить эту необходимость, автоматизируя эти последовательности команд, чтобы упростить свою жизнь в оболочке и сделать ее более продуктивной. В большинстве организаций Batch Script так или иначе включен для автоматизации вещей.

Некоторые функции пакетного скрипта –

  • Может читать входные данные пользователей, чтобы их можно было обрабатывать дальше.

  • Имеет управляющие структуры, например, для переключения, для лучшей автоматизации и написания сценариев.

  • Поддерживает расширенные функции, такие как функции и массивы.

  • Поддерживает регулярные выражения.

  • Может включать в себя другие программные коды, такие как Perl.

Может читать входные данные пользователей, чтобы их можно было обрабатывать дальше.

Имеет управляющие структуры, например, для переключения, для лучшей автоматизации и написания сценариев.

Поддерживает расширенные функции, такие как функции и массивы.

Поддерживает регулярные выражения.

Может включать в себя другие программные коды, такие как Perl.

Некоторые из наиболее часто используемых пакетных сценариев –

  • Настройка серверов для разных целей.

  • Автоматизация служебных операций, таких как удаление ненужных файлов или файлов журналов.

  • Автоматизация развертывания приложений из одной среды в другую.

  • Установка программ на разных машинах одновременно.

Настройка серверов для разных целей.

Автоматизация служебных операций, таких как удаление ненужных файлов или файлов журналов.

Автоматизация развертывания приложений из одной среды в другую.

Установка программ на разных машинах одновременно.

Пакетные сценарии хранятся в простых текстовых файлах, содержащих строки с командами, которые выполняются последовательно, одна за другой. Эти файлы имеют специальное расширение BAT или CMD. Файлы этого типа распознаются и выполняются через интерфейс (иногда называемый оболочкой), предоставляемый системным файлом, называемым интерпретатором команд. В системах Windows этот интерпретатор известен как cmd.exe.

Для запуска командного файла достаточно просто щелкнуть по нему. Пакетные файлы также можно запускать в командной строке или в строке запуска-запуска. В этом случае необходимо использовать полное имя пути, если только путь к файлу не находится в среде пути.

Пакетный скрипт – операторы

Оператор – это символ, который указывает компилятору выполнять определенные математические или логические манипуляции.

В пакетном скрипте возможны следующие типы операторов.

  • Арифметические операторы
  • Реляционные операторы
  • Логические операторы
  • Операторы присваивания
  • Битовые операторы

Пакетный скрипт – псевдонимы

Псевдонимы – это создание ярлыков или ключевых слов для существующих команд. Предположим, что если мы хотим выполнить приведенную ниже команду, которая является ничем иным, как командой вывода списка каталогов с параметром / w, чтобы не отобразить все необходимые сведения в списке каталогов.

Dir /w

Предположим, нам нужно создать ярлык для этой команды следующим образом.

dw = dir /w

Когда мы хотим выполнить команду dir / w , мы можем просто ввести слово dw . Слово «dw» теперь стало псевдонимом команды Dir / w.

Пакетный скрипт – реестр

Реестр является одним из ключевых элементов в системе Windows. Он содержит много информации о различных аспектах операционной системы. Почти все приложения, установленные в системе Windows, взаимодействуют с реестром в той или иной форме.

Реестр содержит два основных элемента: ключи и значения.Ключи реестра – это объекты-контейнеры, похожие на папки.Значения реестра – это неконтейнерные объекты, похожие на файлы. Ключи могут содержать значения или дополнительные ключи.

В этой главе рассматриваются различные функции, такие как запрос значений, добавление, удаление и редактирование значений из реестра.

Чтение из реестра осуществляется с помощью команды REG QUERY.

Добавление в реестр осуществляется с помощью команды REG ADD.

:/>  Как изменить каталог установки программ по умолчанию в Windows

Удаление из реестра производится с помощью команды REG DEL.

Копирование из реестра выполняется с помощью команды REG COPY.

Сравнение разделов реестра производится с помощью команды REG COMPARE.

Пакетный скрипт – сеть

Пакетный скрипт имеет возможность работать с сетевыми настройками. Команда NET используется для обновления, исправления или просмотра сети или сетевых настроек. В этой главе рассматриваются различные параметры, доступные для команды net.

Просмотрите текущий пароль и ограничения входа в систему для компьютера.

Отображает ваши текущие настройки сервера или рабочей группы.

Добавляет или удаляет компьютер, подключенный к контроллеру домена Windows.

Эта команда может быть использована для следующих

Просмотр сведений о конкретной учетной записи пользователя.

Эта команда используется для остановки и запуска определенной службы.

Отображение сетевой статистики рабочей станции или сервера.

Подключает или отключает компьютер от общего ресурса или отображает информацию о ваших подключениях.

Пакетный скрипт – строки

В DOS строка представляет собой упорядоченную коллекцию символов, например «Hello, World!».

S.No Строки и описание
1Создать строку

Строка может быть создана в DOS следующим образом.

2Пустой строки

Пустой строки

3Строковая интерполяция

Строковая интерполяция – это способ создания нового значения String из набора констант, переменных, литералов и выражений путем включения их значений в строковый литерал.

4Конкатенация строк

Вы можете использовать оператор set для объединения двух строк или строки и символа, или двух символов. Ниже приведен простой пример, который показывает, как использовать конкатенацию строк.

5Длина строки

В сценариях DOS не определена функция длины для определения длины строки. Существуют пользовательские функции, которые можно использовать для одного и того же. Ниже приведен пример пользовательской функции для определения длины строки.

6toInt

Переменная, которая была установлена ​​как строка с использованием переменной set, может быть преобразована в целое число с помощью переключателя / A, который использует переменную set. В следующем примере показано, как это можно сделать.

7Выровнять право

Это используется для выравнивания текста вправо, что обычно используется для улучшения читаемости числовых столбцов.

8Левая строка

Это используется для извлечения символов из начала строки.

9Mid String

Это используется для извлечения подстроки через положение символов в строке.

10Удалить

Функция подстановки строк также может быть использована для удаления подстроки из другой строки.

11Удалить оба конца

Это используется для удаления первого и последнего символа строки.

12Удалить все пробелы

Это используется для удаления всех пробелов в строке путем подстановки.

13Заменить строку

Чтобы заменить подстроку другой строкой, используйте функцию подстановки строк.

14Правая строка

Это используется для извлечения символов из конца строки.

Строка может быть создана в DOS следующим образом.

Пустой строки

Строковая интерполяция – это способ создания нового значения String из набора констант, переменных, литералов и выражений путем включения их значений в строковый литерал.

Вы можете использовать оператор set для объединения двух строк или строки и символа, или двух символов. Ниже приведен простой пример, который показывает, как использовать конкатенацию строк.

В сценариях DOS не определена функция длины для определения длины строки. Существуют пользовательские функции, которые можно использовать для одного и того же. Ниже приведен пример пользовательской функции для определения длины строки.

Переменная, которая была установлена ​​как строка с использованием переменной set, может быть преобразована в целое число с помощью переключателя / A, который использует переменную set. В следующем примере показано, как это можно сделать.

Это используется для выравнивания текста вправо, что обычно используется для улучшения читаемости числовых столбцов.

Это используется для извлечения символов из начала строки.

Это используется для извлечения подстроки через положение символов в строке.

Функция подстановки строк также может быть использована для удаления подстроки из другой строки.

Это используется для удаления первого и последнего символа строки.

Это используется для удаления всех пробелов в строке путем подстановки.

Чтобы заменить подстроку другой строкой, используйте функцию подстановки строк.

Это используется для извлечения символов из конца строки.

Пакетный скрипт – устройства

В Windows появилась улучшенная библиотека, которую можно использовать в пакетном скрипте для работы с устройствами, подключенными к системе. Это называется консолью устройства – DevCon.exe.

Разработчики и тестировщики драйверов Windows могут использовать DevCon для проверки правильности установки и настройки драйвера, включая соответствующие INF-файлы, стек драйверов, файлы драйверов и пакет драйверов. Вы также можете использовать команды DevCon (включить, отключить, установить, запустить, остановить и продолжить) в сценариях для тестирования драйвера.DevCon – это инструмент командной строки, который выполняет функции управления устройствами на локальных и удаленных компьютерах.

Отображение информации о драйвере и устройстве DevCon может отображать следующие свойства драйверов и устройств на локальных компьютерах и удаленных компьютерах (под управлением Windows XP и более ранних версий) –

Аппаратные идентификаторы, совместимые идентификаторы и идентификаторы экземпляров устройства. Эти идентификаторы подробно описаны в строках идентификации устройства.

Классы настройки устройства.

Устройства в классе настройки устройства.

INF-файлы и файлы драйверов устройств.

Детали пакетов драйверов.

Аппаратные ресурсы.

Состояние устройства.

Ожидаемый стек драйверов.

Пакеты драйверов сторонних производителей в магазине драйверов.

Поиск устройств DevCon может выполнять поиск установленных и удаленных устройств на локальном или удаленном компьютере по идентификатору оборудования, идентификатору экземпляра устройства или классу настройки устройства.

Изменение настроек устройства DevCon может изменять состояние или конфигурацию устройств Plug and Play (PnP) на локальном компьютере следующими способами:

Включить устройство.

Отключить устройство.

Обновление драйверов (интерактивное и неинтерактивное).

Установите устройство (создайте devnode и установите программное обеспечение).

Удалите устройство из дерева устройств и удалите его стек устройств.

Rescan для устройств Plug and Play.

Добавьте, удалите и измените порядок аппаратных идентификаторов устройств с корневым перечислением.

Измените верхний и нижний драйверы фильтра для класса настройки устройства.

Добавляйте и удаляйте сторонние пакеты драйверов из хранилища драйверов.

DevCon (DevCon.exe) включается при установке WDK, Visual Studio и Windows SDK для настольных приложений. DevCon.exe комплект доступен в следующих местах при установке.

%WindowsSdkDir%toolsx64devcon.exe
%WindowsSdkDir%toolsx86devcon.exe
%WindowsSdkDir%toolsarmdevcon.exe

Пакетный скрипт – функции

Функция – это набор операторов, организованных вместе для выполнения определенной задачи. В пакетных сценариях аналогичный подход применяется для группировки логических операторов вместе для формирования функции.

Как и любые другие языки, функции в Batch Script следуют той же процедуре –

  • Объявление функции – сообщает компилятору имя функции, тип возвращаемого значения и параметры.

  • Определение функции – предоставляет фактическое тело функции.

Объявление функции – сообщает компилятору имя функции, тип возвращаемого значения и параметры.

Определение функции – предоставляет фактическое тело функции.

Пакетный сценарий – принятие решений

Структуры принятия решений требуют, чтобы программист указал одно или несколько условий, которые должны быть оценены или протестированы программой, вместе с оператором или инструкциями, которые должны быть выполнены, если условие определено как истинное , и, необязательно, другие операторы, которые должны быть выполнены, если условие определяется как ложное .

Первое заявление о принятии решения – это утверждение «если».

Следующим оператором принятия решения является оператор If / else. Ниже приводится общая форма этого утверждения.

Иногда требуется иметь несколько операторов if, встроенных друг в друга. Ниже приводится общая форма этого утверждения.

Переменные среды

Чтобы запустить пакетные файлы из командной строки, вам нужно либо перейти в папку, в которой хранится пакетный файл, либо вы можете указать местоположение файла в переменной среды path. Таким образом, предполагая, что пакетный файл хранится в папке C:Applicationbin , вам нужно будет следовать этим инструкциям для включения переменной PATH.

Подпрограммы

Подпрограммы, генерирующие сообщения об ошибках, создают дополнительную «проблему» в поиске причины ошибки, так как они могут вызываться несколько раз в одном пакетном файле.

Чтобы выяснить, что вызывает неправильный вызов подпрограммы, выполните следующие действия:

Шаг 1 – Добавить и сбросить переменную счетчика в начале скрипта –

SET Counter = 0

Шаг 2 – Увеличивайте счетчик каждый раз, когда вызывается подпрограмма, вставляя следующую строку в начале подпрограммы

SET /A Counter =1

Шаг 3 – Вставьте еще одну строку сразу после приращения счетчика, содержащую только команду SET; это перечислит все переменные окружения и их значения.

Шаг 4 – Следуйте процедуре, чтобы найти источники сообщений об ошибках, описанных выше.

Примеры

TASKLIST

Приведенная выше команда получит список всех процессов, запущенных в вашей локальной системе. Ниже приведен снимок вывода, который отображается при запуске вышеуказанной команды. Как видно из следующего вывода, вы не только получаете различные процессы, запущенные в вашей системе, вы также получаете использование памяти каждым процессом.

Image Name                    PID       Session Name       Session#     Mem Usage
========================= ========    ================ =========== ============
System Idle Process             0        Services            0              4 K
System                          4        Services            0            272 K
smss.exe                      344        Services            0          1,040 K
csrss.exe                     528        Services            0          3,892 K
csrss.exe                     612        Console             1         41,788 K
wininit.exe                   620        Services            0          3,528 K
winlogon.exe                  648        Console             1          5,884 K
services.exe                  712        Services            0          6,224 K
lsass.exe                     720        Services            0          9,712 K
svchost.exe                   788        Services            0         10,048 K
svchost.exe                   832        Services            0          7,696 K
dwm.exe                       916        Console             1        117,440 K
nvvsvc.exe                    932        Services            0          6,692 K
nvxdsync.exe                  968        Console             1         16,328 K
nvvsvc.exe                    976        Console             1         12,756 K
svchost.exe                  1012        Services            0         21,648 K
svchost.exe                   236        Services            0         33,864 K
svchost.exe                   480        Services            0         11,152 K
svchost.exe                  1028        Services            0         11,104 K
svchost.exe                  1048        Services            0         16,108 K
wlanext.exe                  1220        Services            0         12,560 K
conhost.exe                  1228        Services            0          2,588 K
svchost.exe                  1276        Services            0         13,888 K
svchost.exe                  1420        Services            0         13,488 K
spoolsv.exe                  1556        Services            0          9,340 K
tasklist > process.txt

Приведенная выше команда берет вывод, отображаемый в списке задач, и сохраняет его в файле process.txt.

tasklist /fi "memusage gt 40000"

Приведенная выше команда извлекает только те процессы, чья память превышает 40 МБ. Ниже приведен пример вывода, который можно отобразить.

Image Name                    PID      Session Name     Session#     Mem Usage
=========================   ======== ================ =========== ============
dwm.exe                        916     Console             1        127,912 K
explorer.exe                  2904     Console             1        125,868 K
ServerManager.exe             1836     Console             1         59,796 K
WINWORD.EXE                   2456     Console             1        144,504 K
chrome.exe                    4892     Console             1        123,232 K
chrome.exe                    4976     Console             1         69,412 K
chrome.exe                    1724     Console             1         76,416 K
chrome.exe                    3992     Console             1         56,156 K
chrome.exe                    1168     Console             1        233,628 K
chrome.exe                     816     Console             1         66,808 K

Проверка версии реализации расширенной обработки команд

Наконец, для определения внутреннего номера версии текущей реализации расширенной обработки команд применяется оператор IF в следующем виде:

:/>  Как ускорить ноутбук и увеличить его производительность

Здесь условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но число сравнивается с вышеупомянутым внутренним номером версии. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд.

Проверка кода завершения предыдущей команды

Еще один способ использования команды IF — это проверка кода завершения (кода выхода) предыдущей команды. Синтаксис для IF в этом случае имеет следующий вид:

Здесь условие считается истинным, если последняя запущенная команда или программа завершилась с кодом возврата, равным либо превышающим указанное число.

Составим, например, командный файл, который бы копировал файл my.txt на диск C: без вывода на экран сообщений о копировании, а в случае возникновения какой-либо ошибки выдавал предупреждение:

В операторе IF ERRORLEVEL … можно также применять операторы сравнения чисел, приведенные в табл. 3.2. Например:

Замечание.

Иногда более удобным для работы с кодами завершения программ может оказаться использование переменной %ERRORLEVEL%. (строковое представление текущего значения кода ошибки ERRORLEVEL ).

Проверка наличия переменной среды

Аналогично файлам команда IF позволяет проверить наличие в системе определенной переменной среды:

Здесь условие DEFINED применяется подобно условию EXISTS наличия заданного файла, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена. Например:

Проверка существования заданного файла

Второй способ использования команды IF — это проверка существования заданного файла. Синтаксис для этого случая имеет вид:

Условие считается истинным, если указанный файл существует. Кавычки для имени файла не требуются. Приведем пример командного файла, в котором с помощью такого варианта команды IF проверяется наличие файла, указанного в качестве параметра командной строки.

Работа с переменными среды

Если у вас есть переменные, которые будут использоваться в пакетных файлах, то всегда предпочтительнее использовать переменные среды. Как только переменная среды определена, к ней можно получить доступ через знак%. В следующем примере показано, как увидеть JAVA_HOME, определенный в системе.

Синтаксис

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @ commandfile ]

Где некоторые из доступных вариантов следующие –

  • / DL – Удалить локальный принтер.

  • / dn – удалить подключение к сетевому принтеру.

  • / dd – удалить драйвер принтера.

  • / e – Показать настройки печати.

  • / f [файл] – либо файл inf, либо выходной файл.

  • / F [файл] – расположение INF-файла, от которого может зависеть INF-файл, указанный в / f.

  • / ia – установить драйвер принтера с помощью файла inf.

  • / id – установить драйвер принтера с помощью мастера добавления драйвера принтера.

  • / if – установить принтер с помощью файла inf.

  • / ii – Установите принтер с помощью мастера добавления принтера с помощью файла inf.

  • / il – Установить принтер с помощью мастера добавления принтера.

  • / in – Добавить подключение к сетевому принтеру.

  • / ip – установить принтер с помощью мастера установки сетевого принтера.

  • / k – Печать тестовой страницы на указанном принтере, не может сочетаться с командой при установке принтера.

  • / l [путь] – Путь источника драйвера принтера.

  • / m [модель] – название модели драйвера принтера.

  • / n [имя] – имя принтера.

  • / o – Показать представление очереди принтера.

  • / p – Показать свойства принтера.

  • / Ss – сохранить настройки принтера в файл.

  • / Sr – восстановить настройки принтера из файла.

  • / y – установить принтер по умолчанию.

  • / Xg – Получить настройки принтера.

  • / Xs – установить настройки принтера.

/ DL – Удалить локальный принтер.

/ dn – удалить подключение к сетевому принтеру.

/ dd – удалить драйвер принтера.

/ e – Показать настройки печати.

/ f [файл] – либо файл inf, либо выходной файл.

/ F [файл] – расположение INF-файла, от которого может зависеть INF-файл, указанный в / f.

/ ia – установить драйвер принтера с помощью файла inf.

/ id – установить драйвер принтера с помощью мастера добавления драйвера принтера.

/ if – установить принтер с помощью файла inf.

/ ii – Установите принтер с помощью мастера добавления принтера с помощью файла inf.

/ il – Установить принтер с помощью мастера добавления принтера.

/ in – Добавить подключение к сетевому принтеру.

/ ip – установить принтер с помощью мастера установки сетевого принтера.

/ k – Печать тестовой страницы на указанном принтере, не может сочетаться с командой при установке принтера.

/ l [путь] – Путь источника драйвера принтера.

/ m [модель] – название модели драйвера принтера.

/ n [имя] – имя принтера.

/ o – Показать представление очереди принтера.

/ p – Показать свойства принтера.

/ Ss – сохранить настройки принтера в файл.

/ Sr – восстановить настройки принтера из файла.

/ y – установить принтер по умолчанию.

/ Xg – Получить настройки принтера.

/ Xs – установить настройки принтера.

Сложные командные линии

Другим распространенным источником ошибок являются неправильно перенаправленные команды, такие как, например, «вложенные» команды FIND или FINDSTR с неверными строками поиска, иногда внутри цикла FOR / F.

Чтобы проверить правильность этих сложных команд, выполните следующие действия:

Шаг 1 – Вставьте «строки проверки команд» непосредственно перед строкой, которая использует комплексный набор команд.

Создание массива

Массив создается с помощью следующей команды set.

set a[0]=1

Где 0 – индекс массива, а 1 – значение, присвоенное первому элементу массива.

Другой способ реализации массивов – определить список значений и выполнить итерацию по списку значений. В следующем примере показано, как это можно реализовать.

Тестирование, если принтер существует

Могут быть случаи, когда вы можете быть подключены к сетевому принтеру вместо локального принтера. В таких случаях всегда полезно проверить, существует ли принтер в первую очередь перед печатью.

Существование принтера можно оценить с помощью файла RUNDLL32.EXE PRINTUI.DLL, который используется для управления большинством настроек принтера.

Цикл for /d … in … do …

Следующий вариант команды FOR реализуется с помощью ключа /D:

В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов, а не имен файлов. Скажем, выполнив следующий командный файл:

мы получим список всех каталогов на диске C:, например:

Перенаправление вывода (stdout и stderr)

Обычной практикой в ​​пакетных файлах является отправка вывода программы в файл журнала. Оператор> отправляет или перенаправляет stdout или stderr в другой файл. В следующем примере показано, как это можно сделать.

Dir C: > list.txt

В приведенном выше примере стандартный вывод команды Dir C: перенаправляется в файл list.txt.

Если вы добавите число 2 к фильтру перенаправления, он перенаправит stderr в файл lists.txt.

Dir C: 2> list.txt

Можно даже объединить потоки stdout и stderr, используя номер файла и префикс «&». Ниже приведен пример.

DIR C: > lists.txt 2>&1

Пакетный скрипт – ввод / вывод

Существует три универсальных «файла» для ввода с клавиатуры, печати текста на экране и ошибок печати на экране. Файл «Стандартный вход», известный как stdin , содержит входные данные для программы / скрипта. Файл «Standard Out», известный как stdout , используется для записи вывода для отображения на экране.

На каждый из этих трех стандартных файлов, иначе называемых стандартными потоками, ссылаются с помощью чисел 0, 1 и 2. Stdin – это файл 0, stdout – это файл 1, а stderr – это файл 2.

Оставьте комментарий