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; в подібному випадку підставляється значення цієї змінної.

  • Створення порожнього файлу, ім'я якого задається параметром командного рядка.

    Якщо в параметрах командного рядка не заданий, то користувачеві видається повідомлення про помилку.

    n0 filename.ext
    : exit

    Приклади виведення для відповідального і не відповідає вузлів:

    Команда find / I "TTL" повертає код ERRORLEVEL рівний 0. Якщо рядок "TTL" присутній в результаті виконання ping. Ключ / I має сенс використовувати, щоб результат не залежав від того, малі або великі символи складають рядок "ttl".
    Результат роботи командного файлу записується в текстовий файл iplist.txt

    Існують деякі особливості реалізації командного інтерпретатора CMD.EXE. які необхідно враховувати при обробці значень змінних всередині циклів IF і FOR. Використання значень змінних всередині дужок, вимагає змінити стандартний режим інтерпретації командного процесора. Розробниками передбачена можливість запуску CMD.EXE з параметром / V: ON. що включає дозвіл відкладеного розширення змінних середовища із застосуванням символу знаку оклику (!) як роздільник. Тобто, параметр / V: ON дозволяє використовувати! Var! в якості значення змінної var під час виконання всередині циклів команд FOR і IF. Але на практиці частіше використовується можливість локального включення даного режиму всередині командного файлу спеціальною директивою:

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

    nbsp nbsp У російськомовній довідці команди IF є помилка, яка багато років переходить з версії у версію - замість оператора EQU - одно. вказано EQL - одно