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
Приклади виведення для відповідального і не відповідає вузлів:
Відповідь від 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 - одно
Поділися в соціальних мережах:
Схожі
- Команда rmdir (rd) - видалити каталог файлової системи windows.
- Hostname - відобразити ім`я комп`ютера в командному рядку windows.
- Команда set - робота зі змінними середовища windows
- Команда exit - завершити роботу командного процесора або поточного командного файлу.
- Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…
- Як складати формули в excel для початківців.
- Команда echo - висновок тексту на екран консолі
- Команда where - пошук файлів за шаблоном імені.
- Команда convert
- Команда endlocal - скасування локальних змін змінних середовища для поточного командного файлу.
- Goto - передача управління містить мітку рядку пакетного файлу.
- Команда fc - порівняння файлів.
- Команда setlocal - зміна змінних середовища для поточного командного файлу.
- Gpresult - відображення результуючої політики (rsop) для указанногопользователя і комп`ютера.
- Команда find - пошук рядка символів в файлі
- Pushd - запам`ятати поточний каталог і перейти в зазначений.
- Команда takeown - змінити власника файлу або каталогу.
- Команда replace - замінити або додати файл в каталог.
- Вивчаємо coffeescript. Умови.
- Умовний оператор в jаvascript
- Умовний оператор в php