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

Відео: туторіал по BAT # 2: Оператор 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% gt; gt; 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% gt; gt; 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 - одно


    Поділися в соціальних мережах:

    Схожі
    Умовний оператор в phpУмовний оператор в php
    Команда exit - завершити роботу командного процесора або поточного командного файлу.Команда exit - завершити роботу командного процесора або поточного командного файлу.
    Як складати формули в excel для початківців.Як складати формули в excel для початківців.
    Команда find - пошук рядка символів в файліКоманда find - пошук рядка символів в файлі
    Умовний оператор в jаvascriptУмовний оператор в jаvascript
    Команда convertКоманда convert
    Команда echo - висновок тексту на екран консоліКоманда echo - висновок тексту на екран консолі
    Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…
    Команда replace - замінити або додати файл в каталог.Команда replace - замінити або додати файл в каталог.
    Команда takeown - змінити власника файлу або каталогу.Команда takeown - змінити власника файлу або каталогу.
    » » If - оператор умовного виконання команд в командних файлах windows