Windows bat if

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

Windows bat if

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

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; в подобном случае подставляется значение этой переменной. Примеры использования:

  • Создание пустого файла, имя которого задается параметром командной строки. Если параметр командной строки не задан, то пользователю выдается сообщение об ошибке.

    @echo off REM Проверить наличие имени файла, задаваемого в качестве параметра %1 REM Если параметр %1 пустой – переход на метку error if “%1” EQU “” goto error REM Если параметр задан, создаем пустой файл, копированием из устройства nul copy nul “%1” exit :error ECHO File name required ! Must be – %~n0 filename.ext :exit

  • Командный файл, выполняющий опрос командой ping сетевых адресов в заданном диапазоне ( 192.168.1.1 – 192.168.1.254 ). Команда ping формирует значение переменной ERRORLEVEL равное нулю, если верно заданы параметры командной строки. То есть, определить доступность пингуемого IP-адреса методом анализа кода возврата ping не получится, поскольку он будет нулевым, независимо от того, отвечает ли пингуемое устройство, или нет. Поэтому, для решения данной задачи необходимо определить характерный признак, который присутствует в выводимых результатах только в том случае, когда пингуемое устройство доступно. Таким признаком может быть наличие строки символов “TTL” в выводе команды ping. Для определения признака можно использовать команду find в цепочке с командой ping. Примеры вывода для отвечающего и не отвечающего узлов:

    Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64 – если устройство с данным IP-адресом доступно;

    Превышен интервал ожидания для запроса. – если устройство не отвечает;

    Команда find /I “TTL” возвращает код ERRORLEVEL равный 0, если строка “TTL” присутствует в результате выполнения ping. Ключ /I имеет смысл использовать, чтобы результат не зависил от того, строчные или заглавные символы составляют строку “ttl”.

    Результат работы командного файла записывается в текстовый файл iplist.txt

    @ECHO OFF REM Постоянная часть IP-адреса set IPTMP=192.168.1. REM Количество пингуемых узлов set N=254 rem С какого адреса начать – начальное значение ” хвоста ” IP- адреса X.X.X.IPMIN set /A IPMIN=1 ECHO %DATE% Опрос пингом %N% адресов начиная с %IPTMP%%IPMIN% >> iplist.

    txt rem M0 – метка для организации цикла :M0 rem Переменная IPFULL – полное значение текущего IP-адреса set IPFULL=%IPTMP%%IPMIN% rem Если ” хвост “больше N – перейти к завершению работы IF %IPMIN% GTR %N% GOTO ENDJOB ping -n 1 %IPFULL% | find /I “TTL” if %ERRORLEVEL%==0 Echo %IPFULL% >> iplist.

    txt rem Сформируем следующий IP-адрес set /A IPMIN=%IPMIN% + 1 rem Перейдем на выполнение следующего шага GOTO M0 rem Завершение работы :endjob exit

    Существуют некоторые особенности реализации командного интерпретатора CMD.EXE, которые необходимо учитывать при обработке значений переменных внутри циклов IF и FOR.

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

    EXE с параметром /V:ON, что включает разрешение отложенного расширения переменных среды с применением символа восклицательного знака (!) в качестве разделителя.

    То есть, параметр /V:ON разрешает использовать !var! в качестве значения переменной var во время выполнения внутри циклов команд FOR и IF. Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:

    Setlocal EnableDelayedExpansion

    После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки:

    FOR … (
    IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0 … )
        В русскоязычной справке команды IF имеется ошибка, которая много лет переходит из версии в версию – вместо оператора EQU – равно, указано EQL – равно

    Весь список команд CMD Windows

  • Источник: https://ab57.ru/cmdlist/if.html

    Урок 5 по CMD – условный оператор if

    Windows bat if

    В этой статье мы рассмотрим условный оператор if командной строки (CMD). Как и в любом другом языке программирования, условные оператор служит для проверки заданного условия и в зависимости от результат, выполнять то, или иное действие.

    Условный оператор cmd if содержит практически тот же синтаксис, что и аналогичные конструкции языков VBScript (смотри статью “Урок 5 по VBScript: Условный оператор if…else и select…case”) и Jscript (статья “Урок 8 по JScript: Описание условного оператора if…else, арифметических и логических операторов”) сервера сценариев Windows Script Host.

    Оператор if командная строка

    if условие (оператор1) [else (оператор2)]

    Вначале идет проверка условия, если оно выполняется, идет переход к выполнению оператора1, если нет – к оператору2.

     Если после ключевого слова if прописать not (if not), то: произойдет проверка условия, если оно не выполниться – переход к оператору1, если условие выполняется – переход к оператору2.

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

    Давайте откроем редактор notepad++ и пропишем в нем такой код:

    @echo offif “%1″==”1” (echo odin) else (echo dva)

    Как я уже сказал, мы можем использовать не один оператор (командной строки) cmd if, а несколько, посмотрите на данный пример:

    @echo offif “%1″==”1” (hostname & ver & ipconfig /all) else (netstat -a)

    Тут, как и прежде идет проверка передаваемого сценарию параметра, если значение равно 1, то произойдет последовательное выполнение трех команд:

    • hostname – выводит имя компьютера
    • ver – выводит версию ОС
    • ipconfig /all – выводит настройки сети

    Для последовательного выполнения команд мы использовали знак конкатенации (объединения) “&”. При невыполнении условия произойдет вызов утилиты netstat.

    Что бы проверить существование переменной, используются операторы if defined (если переменная существует) и if not defined (если переменная не существует):

    @echo offset Var1=100if defined Var1 (echo %Var1%)set Var1=if not defined Var1 (echo NOT EXIST!!! Var1)

    Если вы запустите на выполнение данный код, то в окне командной строки будут выведены две строки:

    100
    NOT EXIST!!! Var1

    Вначале, в сценарии происходит создание переменной Var1 и присвоение ей значения 100, далее идет проверка: если переменная Var1 существует, вывести ее значение. Потом мы удаляем переменную и снова запускаем проверку: если переменная Var1 не существует, вывести строку NOT EXIST!!! Var1.

    Мы вправе использовать условный оператор if как вложенный:

    @echo offif “%1″==”1” (@if “%2″==”2” (hostname & ver) else (ver)) else (hostname & ver & netstat -a)

    В данном примере, первый оператор командной строки if проверяет, равен ли первый аргумент 1, если да, то идет выполнение второго условно оператора и проверка на значение другого аргумента.

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

    Давайте теперь посмотрим на такой пример:

    @echo offif “%1″==”slovo” (echo slovo) else (@if “%1″==”SLOVO” (echo SLOVO) else (echo NOT DATA!!!))

    Тут идет проверка первого аргумента, и регистр строки учитывается, что бы отключить учет регистра при проверке строк, после оператора if нужно прописать ключ /I:

    @echo offif /I “%1″==”slovo” (echo slovo) else (if /I “%1″==”SLOVO” (echo SLOVO) else (echo NOT DATA!!!))

    В данном случае, передадим мы строку SLOVO, slovo, SloVo и так далее, все ровно на экран консоли выведется строка “slovo”, так как учет регистра знаков будет отключен.

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

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

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

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

    Источник: http://scriptcoding.ru/2013/08/17/operator-if-cmd/

    Язык интерпретатора Cmd.exe. Командные файлы

    Windows bat if

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

    @ECHO OFFCLSREM Вывод списка log-файловDIR C:\*.logREM Передача выполнения файлу f.batf.batCOPY A:\*.* C:\PAUSE

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

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

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

    Например:

    @ECHO OFFCLSREM Вывод списка log-файловDIR C:\*.logREM Передача выполнения файлу f.batCALL f.batCOPY A:\*.* C:\PAUSE

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

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

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

    @ECHO OFFCOPY %1 %2GOTO Label1ECHO Эта строка никогда не выполнится:Label1REM Продолжение выполненияDIR %2

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

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

    REM Продолжение выполнения

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

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

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

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

    Например, если запустить с параметром “Копия-1” командный файл следующего содержания:

    @ECHO OFFECHO %1CALL :2 Копия-2:2ECHO %1

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

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

    С помощью команды IF … ELSE (ключевое слово ELSE может отсутствовать) в пакетных файлах можно выполнять обработку условий нескольких типов.

    При этом если заданное после IF условие принимает истинное значение, система выполняет следующую за условием команду (или несколько команд, заключенных в круглые скобки), в противном случае выполняется команда (или несколько команд в скобках), следующие за ключевым словом ELSE.

    Первый тип условия используется обычно для проверки значения переменной. Для этого применяются два варианта синтаксиса команды IF:

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

    (квадратные скобки указывают на необязательность заключенных в них параметров) или

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

    Рассмотрим сначала первый вариант. Условие строка1==строка2 (здесь необходимо писать именно два знака равенства) считается истинным при точном совпадении обеих строк. Параметр NOT указывает на то, что заданная команда выполняется лишь в том случае, когда сравниваемые строки не совпадают.

    Строки могут быть литеральными или представлять собой значения переменных (например, %1 или %TEMP% ). Кавычки для литеральных строк не требуются. Например,

    IF %1==%2 ECHO Параметры совпадают!IF %1==Петя ECHO Привет, Петя!

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

    IF %MyVar%==C:\ ECHO Ура!!!

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

    IF -%MyVar%==-C:\ ECHO Ура!!!

    С помощью команд IF и SHIFT можно в цикле обрабатывать все параметры командной строки файла, даже не зная заранее их количества. Например, следующий командный файл (назовем его primer.bat) выводит на экран имя запускаемого файла и все параметры командной строки:

    @ECHO OFFECHO Выполняется файл: %0ECHO.ECHO Файл запущен со следующими параметрами…REM Начало цикла:BegLoopIF -%1==- GOTO ExitLoopECHO %1REM Сдвиг параметровSHIFTREM Переход на начало циклаGOTO BegLoop:ExitLoopREM Выход из циклаECHO.ECHO Все.

    Если запустить primer.bat с четырьмя параметрами:

    то в результате выполнения на экран выведется следующая информация:

    Выполняется файл: primer.bat Файл запущен со следующими параметрами:АБВГ Все.

    Рассмотрим теперь оператор IF в следующем виде:

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

    Синтаксис и значение операторов_сравнения представлены в табл. 3.2.

    Таблица 3.2. Операторы сравнения в IF

    ОператорЗначение
    EQLРавно
    NEQНе равно
    LSSМеньше
    LEQМеньше или равно
    GTRБольше
    GEQБольше или равно

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

    @ECHO OFFCLSIF -%1 EQL –Вася ECHO Привет, Вася!IF -%1 NEQ –Вася ECHO Привет, но Вы не Вася!

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

    будет истинным.

    Источник: https://intuit.ru/studies/courses/1059/225/lecture/27287?page=3

    5 IF Statements to Use for Smarter Windows Batch Scripts

    Windows bat if

    If you do a lot of work in Windows batch files, the IF statement offers a very powerful way to add flexibility to your scripts.

    In this article you're going to learn about the five main types of IF statements you can use in a Windows batch file, how the correct syntax looks, and a realistic example for each.

    If you're ready to start scripting, let's get started!

    1. Compare Values

    One of the basic things you'll usually need to do in a batch script is compare two values and follow a different course of action depending on the comparison.

    For example, let's say you wanted to write a batch script that checks your computer's hard drive size daily. If it's below 3 GB you want to get an email report that says, “Hard Drive Space Too Low.”

    To create a script that compares the current free hard drive space to your limit, you'd create the following batch script and save it as a .bat file.

    @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 is the Windows Management Instrumentation component of Windows that comes with an assortment of commands you can use to pull PC information. This is how the “wmic” command in this script calls the “logicaldisk” space and places it into the FreeSpace variable. Now you can just replace the line “Echo Not enough free space” with a blat email command to send you an alert.

    Finally, set this script up as a windows scheduled batch job that runs daily.

    If you've never used blat before, we have an article that shows you how to set up blat. Unfamiliar with setting up scheduled jobs? We've got you covered with an article on how to set up Windows scheduled tasks.

    2. String Comparisons

    Another valuable IF comparison you can do in a batch job is comparing strings.

    In the following example you'll see how to check your Windows version using a batch job. Then you can compare this to your expected Windows version.

    Some uses of this script would be for IT audits when you need to quickly run a script and make sure the current operating system is the latest, or whether it needs an upgrade.

    Here's what this script looks .

    @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.

    Here's what the output of this script looks .

    The ability to compare strings in batch opens up a whole list of possibilities. If you explore all of the information you can obtain a WMIC command you'll see just how many statistics about your computer you can monitor. You can use scheduled batch jobs to alert on these.

    3. Check If a File Exists

    Another useful situation where an IF statement in a batch file is to check for the existence of a data file.

    A lot of times the batch job is just a monitoring tool that might be scheduled to check for new incoming data files in a specific directory.

    Then, the batch job may either copy that file over to another location where it can be processed, or kick off some windows script that processes the file into an Excel output.

    (We've written in the past about how to use Windows scripts for processing data to an Excel file; some good background reading.)

    Using a batch file to check whether a file exists in a directory is quick and easy. Here's what that script looks .
    @echo offif exist c:\temp\datafile.txt ( %WINDIR%\SysWOW64\cmd.exe cscript LoadToExcel.vbs) else ( rem file doesn't exist

    )

    The IF EXISTS comparison is useful for a lot of things.

    For example if you have a system or application running that creates new error logs in a specific folder when there's a problem, you can run a batch job every so often to monitor whether new error logs are created so you can send an alert.

    4. Check If a Command Failed

    An aspect of batch file scripting that too few IT folks or programmers use is checking for errors.

    There are a lot of batch jobs floating around out there that are performing critical IT tasks backing up important files or running file copy operations. When these batch jobs fail, systems fail and people notice.

    It's much smarter to get an alert when your batch job has failed a command before people start noticing. This way you can fix the issue proactively.

    You can do this by utilizing the %errorlevel% variable that most applications and commands return after they are run.

    All you have to do is follow your command by the IF %ERRORLEVEL% command. If the application or command returned a zero, all is fine. If not, then you need to send yourself an email.

    @echo offxcopy C:omefolder E:\backupfolder

    IF %ERRORLEVEL% NEQ 0

    You don't have to take the email route. You could always write an error log that you might check every morning, or launch a second application or command that attempts to do the copy using an alternate command. Whatever action you want to take, IF %ERRORLEVEL% lets you do it.

    If you'd rather use an IF statement to check for specific error codes, Windows offers a pretty extensive list of error codes.

    5. Check for Missing Parameters

    The last useful IF statement isn't a specific command, but instead to check that the script received the appropriate input parameters.

    For example, let's say you've written a script that that performs an xcopy command from an input folder, to a common network folder used by a team. The user just needs to follow your script name with the parameters defining their personal file path.

    Obviously, you can't properly execute your script without the path specified, so you may put an IF statement at the beginning of your script to make sure both parameters were entered.

    Here's how that looks.
    @echo offIF [%1]==[] (GOTO sub_message) ELSE (xcopy %1 E:\backupfolder)GOTO eof:sub_messageecho You forgot to specify your path.:eof

    If you've never used parameters with batch scripts before, the percent symbol followed by a number represents the parameter variable. %1 is the first parameter, %2 is the second, and so on.

    Batch Jobs Can Be Powerful

    Many people start using batch jobs for simple tasks that need to be executed in sequence. With IF statements it's possible to add a lot more intelligence to your scripts.

    Of course if you really want to step it up a notch, you might consider taking a look at VBA with our guide on creating your first VBA application, or maybe even learn Python programming.

    You can often use more advanced programming languages these, or learn to use PowerShell, to accomplish many of the same tasks you currently use batch jobs for.

    Scrape a Website With This Beautiful Soup Python Tutorial

    Interested in web scraping? Here's how to scrape a website for content and more with the Beautiful Soup Python library.

    Related Topics

    • Windows
    • Programming
    • Windows

    About The AuthorRyan Dube (957 Articles Published) More From Ryan Dube

    Источник: https://www.makeuseof.com/tag/windows-batch-if-statements/

    Поделиться:
    Нет комментариев

      Добавить комментарий

      Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.