5 операторов IF, которые можно использовать для более умных пакетных сценариев Windows
Если вы много работаете с пакетными файлами Windows, оператор IF предлагает очень мощный способ повысить гибкость ваших сценариев.
В этой статье вы узнаете о пяти основных типах операторов IF, которые вы можете использовать в пакетном файле Windows, о том, как выглядит правильный синтаксис, и о реалистичных примерах для каждого из них.
Если вы готовы начать писать сценарии, давайте начнем.
1 Сравните значения
Одной из основных вещей, которые вам обычно нужно делать в пакетном сценарии, является сравнение двух значений и выполнение различных действий в зависимости от сравнения.
Например, предположим, что вы хотите написать пакетный сценарий, который ежедневно проверяет размер жесткого диска вашего компьютера. Если он меньше 3 ГБ, вы хотите получить отчет по электронной почте с надписью «На жестком диске слишком мало места».
Чтобы создать сценарий, который сравнивает текущее свободное пространство на жестком диске с вашим пределом, вам необходимо создать следующий пакетный сценарий и сохранить его в виде файла .bat.
@echo offset DriveLimit=300000000for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%xEcho FreeSpace="%FreeSpace%"Echo Limit="%DriveLimit%"If %FreeSpace% GTR %DriveLimit% (Echo There is enough free space.) else (Echo Not enough free space.)
В сценарии WMIC — это компонент Windows Management Instrumentation (WMI), который поставляется с набором команд, которые вы можете использовать для получения информации с вашего ПК.
Именно так команда «wmic» в этом скрипте вызывает пространство логического диска и помещает его в переменную FreeSpace .
Теперь вы можете просто заменить строку Echo Недостаточно свободного места на команду, чтобы отправить вам оповещение по электронной почте. Настройте скрипт на ежедневный запуск.
2 сравнения строк
Еще одно полезное сравнение IF, которое вы можете выполнить в пакетном задании, — это сравнение строк.
В следующем примере вы увидите, как проверить версию Windows с помощью пакетного задания. Затем вы можете сравнить это с ожидаемой версией Windows.
Некоторые виды использования этого скрипта могут быть для ИТ-аудита, когда вам нужно быстро запустить скрипт и убедиться, что текущая операционная система является последней или нуждается в обновлении.
Вот как выглядит этот скрипт:
@echo offfor /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%jif "%version%" == "6.0" echo Windows Vista.if "%version%" == "6.1" echo Windows 7if "%version%" == "6.2" echo Windows 8if "%version%" == "6.3" echo Windows 8.1if "%version%" == "10.0" echo Windows 10.
Вот как выглядит вывод этого скрипта:
Возможность пакетного сравнения строк открывает целый список возможностей. Если вы изучите всю информацию, которую вы можете получить с помощью команды WMIC, вы увидите, сколько статистических данных о вашем компьютере вы можете отслеживать.
Более того, вы даже можете использовать запланированные пакетные задания, чтобы получать оповещения о них.
3 Проверьте, существует ли файл
Другая полезная ситуация, когда оператор IF в пакетном файле проверяет наличие файла данных.
Во многих случаях пакетное задание — это просто инструмент мониторинга, который можно запланировать для проверки новых входящих файлов данных в определенном каталоге. Затем вы можете либо скопировать этот файл в другое место, либо запустить какой-либо сценарий Windows, который преобразует файл в вывод Excel.
Использование пакетного файла для проверки существования файла в каталоге выполняется быстро и просто. Вот как выглядит этот скрипт:
@echo offif exist c:tempdatafile.txt (%WINDIR%SysWOW64cmd.exe cscript LoadToExcel.vbs) else (rem file doesn't exist)
Сравнение IF EXISTS полезно во многих случаях.
Например, если у вас есть работающая система или приложение, которое создает новые журналы ошибок в определенной папке при возникновении проблемы, вы можете время от времени запускать пакетное задание. Таким образом, вы можете легко отслеживать, создаются ли новые журналы ошибок, чтобы вы могли отправить предупреждение.
4 Проверьте, не выполнилась ли команда
Одним из аспектов написания сценариев пакетных файлов, который используют очень немногие ИТ-специалисты или программисты, является проверка на наличие ошибок.
Существует множество пакетных заданий, которые выполняют важные ИТ-задачи, такие как резервное копирование важных файлов или выполнение операций копирования файлов. Когда эти пакетные задания терпят неудачу, системы выходят из строя, и люди обычно это замечают.
Гораздо разумнее получить предупреждение, когда ваше пакетное задание не выполнило команду, прежде чем люди начнут это замечать. Таким образом, вы можете заранее решить проблему.
Вы можете сделать это, используя переменную %errorlevel%, которую большинство приложений и команд возвращают после запуска. Все, что вам нужно сделать, это выполнить команду с помощью команды IF %ERRORLEVEL%.
@echo offxcopy C:omefolder E:backupfolderIF %ERRORLEVEL% NEQ 0 <blat command to send email>
Если приложение или команда возвращает ноль, все в порядке. Если нет, то вам нужно отправить себе электронное письмо.
Однако вам не обязательно выбирать маршрут электронной почты. Вы всегда можете написать журнал ошибок, который будете проверять каждое утро, или запустить второе приложение или команду, которая попытается выполнить копирование с помощью альтернативной команды.
Более того, если вы предпочитаете использовать оператор IF для проверки определенных кодов ошибок, Windows предлагает довольно обширный список кодов системных ошибок.
5 Проверка на отсутствующие параметры
Последний полезный оператор IF предназначен не для конкретной команды, а для проверки того, что сценарий получил соответствующие входные параметры.
Например, допустим, вы написали сценарий, который выполняет команду xcopy из входной папки в общую сетевую папку, используемую командой. Пользователю просто нужно следовать имени вашего скрипта с параметрами, определяющими его личный путь к файлу.
Вы не можете правильно выполнить свой скрипт без указанного пути, поэтому вы можете поместить оператор IF в начало вашего скрипта, чтобы убедиться, что введены оба параметра.
@echo offIF [%1]==[] (GOTO sub_message) ELSE (xcopy %1 E:backupfolder)GOTO eof:sub_messageecho You forgot to specify your path.:eof
Если вы никогда раньше не использовали параметры с пакетными сценариями, символ процента, за которым следует число, представляет переменную параметра. %1 — первый параметр, %2 — второй и так далее.
В общем, операторы IF слишком удобны, и вам не нужно писать слишком много кода, чтобы их использовать. Конечно, если вы хотите сделать шаг вперед, вы можете взглянуть на VBA с помощью нашего руководства по созданию вашего первого приложения VBA.
Пакетные задания могут быть мощными
Многие люди начали использовать пакетные задания для простых задач, которые необходимо выполнять последовательно. К счастью, с помощью операторов IF в сценарии можно добавить гораздо больше логики.
Кроме того, вы часто можете использовать более продвинутые языки программирования и использовать PowerShell для выполнения многих из тех задач, для которых вы в настоящее время используете пакетные задания.
