Возможна ли проверка условий в пакетном пакетном файле, если да, то как это организовано

Обновлено: 06.07.2024

Существует несколько типов операторов IF, которые можно использовать в пакетном файле Windows для экономии времени и усилий. Посмотрите эти примеры, чтобы узнать больше.

Если вы много работаете с пакетными файлами Windows, оператор IF предлагает очень эффективный способ повысить гибкость ваших сценариев.

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

Если вы готовы начать писать сценарии, давайте начнем.

1. Сравнить значения

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

Например, предположим, что вы хотите написать пакетный скрипт, который ежедневно проверяет размер жесткого диска вашего компьютера. Если он меньше 3 ГБ, вы хотите получить по электронной почте отчет "На жестком диске слишком мало места".

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

В сценарии WMIC — это компонент Windows Management Instrumentation (WMI), который поставляется с набором команд, которые вы можете использовать для получения информации с вашего ПК.

Вот как команда "wmic" в этом скрипте вызывает пространство логического диска и помещает его в переменную FreeSpace.

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

2. Сравнение строк

Еще одно полезное сравнение IF, которое вы можете выполнить в пакетном задании, — это сравнение строк.

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

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

Вот как выглядит этот скрипт:

Вот как выглядит результат этого скрипта:

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

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

3. Проверить, существует ли файл

Еще одна полезная ситуация, когда оператор IF в пакетном файле проверяет наличие файла данных.

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

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

Сравнение IF EXISTS полезно во многих случаях.

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

4. Проверить, не выполнена ли команда

Проверка на наличие ошибок — это один из аспектов написания сценариев пакетных файлов, который используется очень немногими ИТ-специалистами или программистами.

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

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

Это можно сделать, используя переменную %errorlevel%, которую большинство приложений и команд возвращают после запуска. Все, что вам нужно сделать, это выполнить команду с помощью команды IF %ERRORLEVEL%.

Если приложение или команда возвращает ноль, все в порядке. Если нет, то вам нужно отправить себе электронное письмо.

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

Более того, если вы предпочитаете использовать оператор IF для проверки определенных кодов ошибок, Windows предлагает довольно обширный список кодов системных ошибок.

5. Проверить наличие отсутствующих параметров

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

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

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

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

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

Пакетные задания могут быть эффективными

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

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

Выполняет условную обработку в пакетных программах.

Синтаксис

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

Параметры

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

Примечания

Если условие, указанное в предложении if, истинно, выполняется команда, следующая за условием. Если условие ложно, команда в предложении if игнорируется, и команда выполняет любую команду, указанную в предложении else.

Когда программа останавливается, она возвращает код выхода. Чтобы использовать коды выхода в качестве условий, используйте параметр errorlevel.

Если вы используете define, в среду добавляются следующие три переменные: %errorlevel%, %cmdcmdline% и %cmdextversion%.

%errorlevel%: заменяется на строковое представление текущего значения переменной среды ERRORLEVEL. Эта переменная предполагает, что уже не существует переменной среды с именем ERRORLEVEL. Если есть, вместо этого вы получите это значение ERRORLEVEL.

%cmdcmdline%: заменяется исходной командной строкой, которая была передана Cmd.exe до какой-либо обработки Cmd.exe. Это предполагает, что уже не существует переменной среды с именем CMDCMDLINE. Если есть, вместо этого вы получите это значение CMDCMDLINE.

%cmdextversion%: заменяется строковым представлением текущего значения cmdextversion. Это предполагает, что уже не существует переменной среды с именем CMDEXTVERSION. Если есть, вместо этого вы получите это значение CMDEXTVERSION.

Вы должны использовать предложение else в той же строке, что и команда после if.

Примеры

Чтобы отобразить сообщение Не удается найти файл данных, если файл Product.dat не найден, введите:

Чтобы отформатировать диск в дисководе A и отобразить сообщение об ошибке, если ошибка возникнет во время процесса форматирования, введите следующие строки в пакетный файл:

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

Эти строки можно объединить в одну следующим образом:

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

Чтобы перейти к метке "ОК", если значение переменной среды ERRORLEVEL меньше или равно 1, введите:

Существует ли особое правило при использовании более одного оператора IF? Должны ли они быть сгруппированы? Должен ли я использовать круглые скобки для переноса команд?

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

Вы можете использовать круглые скобки для создания блоков в пакетных файлах. ЕСЛИ ( ) . (лично я нахожу это чище/легче для чтения)

5 ответов 5

Существует ли особое правило, которому следует следовать?

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

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

Есть некоторые стандарты кодирования, которые гласят: если вы пишете оператор if, вы должны использовать фигурные скобки, даже если у вас нет предложения else. Это спасает вас от тонких, трудно поддающихся отладке проблем и однозначно читабельно.Я не вижу причин, по которым вы не могли бы применить это рассуждение к пакетным файлам.

Давайте посмотрим на ваш код.

И синтаксис IF из команды HELP IF :

Итак, вы связываете IF как команды.

Если вы используете общее правило стандарта кодирования, о котором я упоминал выше, вы всегда должны использовать круглые скобки. Вот как вы могли бы сделать это для своего примера кода:

Убедитесь, что вы правильно отформатировали текст и сделали отступ. Вы делаете это в коде, и вы должны делать это в своих пакетных скриптах.

Кроме того, вы должны взять за привычку всегда цитировать имена файлов и делать это правильно. В разделах HELP FOR и HELP SET есть многословие, которое поможет вам удалить лишние кавычки при повторном цитировании строк.

Изменить

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

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

Брайан Книттел обсуждает команды, которые особенно эффективны в пакетных файлах, и приводит несколько примеров трех категорий особенно полезных пакетных файлов.

Эта глава из книги

Эта глава из книги

Эта глава из книги 

  • Пакетные файлы позволяют автоматизировать повторяющиеся задачи и создавать удобные ярлыки команд.
  • Язык пакетных файлов в Windows XP значительно улучшен по сравнению с версией для DOS/Win9x.
  • Как и скрипты, пакетные файлы могут служить документацией по важным бизнес-процедурам.
  • Прежде чем начать эту главу, вы должны ознакомиться с материалами главы 11 "Среда командной строки CMD".

Почему пакетные файлы?

Хотя Windows Script Host представляет собой мощную среду для написания сценариев и программирования, устаревший пакетный файл все еще может быть полезным и мощным инструментом в среде Windows XP. Почему? В то время как программы Windows Script Host используют объекты в качестве инструментов для выполнения задач управления Windows и обработки данных, пакетные файлы используют в качестве инструментов целые программы. Сценарии WSH дают вам полный контроль над деталями задачи, тогда как пакетные файлы позволяют работать на более грубом, макроуровне. Таким образом, иметь в своем наборе инструментов как маленькие, так и большие ключи — это преимущество, так же полезно знать, как писать сценарии и пакетные файлы. Кроме того, как и программы Windows Script, пакетные файлы служат формой документации, поскольку они фиксируют важную информацию об управлении бизнесом — процедуры и данные конфигурации — в письменной форме.

За время моей работы как разработчика программного обеспечения, так и писателя я обнаружил, что пакетные файлы, которые я пишу, делятся на три категории:

  • Крошечные файлы для управления средой командной строки. Например, у меня есть несколько небольших пакетных файлов, которые изменяют рабочий каталог на правильную папку для конкретных проектов и, возможно, добавляют каталог в путь поиска. Таким образом, я могу открыть окно командной строки, ввести одно слово и быть готовым к работе с файлами определенного проекта.
  • Файлы среднего размера, выполняющие определенный набор команд, которые я набираю снова и снова. Например, мне часто приходится отправлять клиенту обновленные версии определенного набора файлов. Я использую пакетный файл для обновления ZIP-файла и отправки результатов по электронной почте, поэтому вся работа выполняется с помощью одной команды.
  • Пакетные файлы Monster, выполняющие длинную последовательность задач и обрабатывающие различные параметры командной строки. В моей работе они, как правило, включают специально разработанные программы командной строки для приложений обработки данных или предоставленные Microsoft утилиты, используемые для управления Windows — как стандартные инструменты, так и те, которые входят в наборы ресурсов Windows. Например, у меня есть пакетный файл, который документирует все домены Интернета, управляемые службой DNS моего Windows 2000 Server. Этот командный файл может реконструировать весь набор доменов, если необходимо перейти на новый сервер. Для пакетного файла такое задание совсем несложно, но повторный ввод через графический интерфейс будет кошмаром.

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

Читайте также: