If exist bat примеры: Урок 5 по CMD — условный оператор if
Содержание
Урок 5 по CMD — условный оператор if
Автор Coding На чтение 5 мин Просмотров 2.1к. Опубликовано
В этой статье мы рассмотрим условный оператор 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 off if"%1"=="1"(echo odin) else (echo dva) |
Как я уже сказал, мы можем использовать не один оператор (командной строки) cmd if, а несколько, посмотрите на данный пример:
@echo off if"%1"=="1"(hostname & ver & ipconfig /all) else (netstat -a) |
Тут, как и прежде идет проверка передаваемого сценарию параметра, если значение равно 1, то произойдет последовательное выполнение трех команд:
- hostname – выводит имя компьютера
- ver – выводит версию ОС
- ipconfig /all – выводит настройки сети
Для последовательного выполнения команд мы использовали знак конкатенации (объединения) “&”. При невыполнении условия произойдет вызов утилиты netstat.
Что бы проверить существование переменной, используются операторы if defined (если переменная существует) и if not defined (если переменная не существует):
@echo off set Var1=100 if 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 off if"%1"=="1"(@if"%2"=="2"(hostname & ver) else (ver)) else (hostname & ver & netstat -a) |
В данном примере, первый оператор командной строки if проверяет, равен ли первый аргумент 1, если да, то идет выполнение второго условно оператора и проверка на значение другого аргумента.
Обратите внимание!!! Все переменные определяются как строки. При проверке условия я заключал имена переменных и значений в двойные кавычки, это позволяет избежать ошибок, так как параметры или аргументы могут содержать пробелы, или же у переменной может и вовсе отсутствовать значение.
Давайте теперь посмотрим на такой пример:
@echo off if"%1"=="slovo"(echo slovo) else (@if "%1"=="SLOVO"(echo SLOVO) else (echo NOT DATA!!!)) |
Тут идет проверка первого аргумента, и регистр строки учитывается, что бы отключить учет регистра при проверке строк, после оператора if нужно прописать ключ /I:
@echo off if/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.
Условный оператор IF — как грамотно оформить код
JavaScript отключён. Чтобы полноценно использовать наш сайт, включите JavaScript в своём браузере.
-
Автор темыКирилл -
Дата начала
Кирилл
#1
А если исходя из переменной мне нужно выполнить определенный call?
Тогда просто используем set ==результат,и запуск команды верно?
А можно пример кода с комментарием?
А вот такой блок будет работать:
(прошу не обращать внимание на ошибки -это пример)
if %test%=result ( тут блок команд (тут скрипт vbs) ) else echo error. ..
Последнее редактирование:
Dragokas
Angry & Scary Developer
#2
Koza Nozdri, видел твои коды.
Очень красивы, но Имхо, бессмысленны с точки зрения отладки ошибок и понимания логики переходов по условиям.
Очень рекомендую множество вложенных условий формировать по уровням,
как это делается на ЯВУ (языках высокого уровня).
Иначе, большая вероятность, потерять скобку.
if "%test%"=="result" ( тут блок команд if "%A%"=="%B%" ( тут скрипт vbs ) else ( echo error. .. ) ) else ( echo test не равнялся result )
Т.е. простейший IF для строк (с игнорированием регистра букв — ключ /i ) будет:
if /i "%A%"=="%B%" ( echo Удача ) else ( echo Неудача )
Для оператора возврата кода ошибки:
:: генерируем произвольный код ошибки cmd /c Exit /B 1 if errorlevel 1 ( echo Была ошибка ) else echo Не было ошибок )
Оператор errorlevel 1 — означает что мы сравниваем %errorlevel% с 1. Если код ошибки >= 1, то условие выполняется (true).Для логического сравнения чисел кавычки убираем:
@echo off set X=1 set Y=2 if %Y% GTR %X% ( echo Y больше X ) else ( echo Y меньше, либо равен X )
Справка if /?
EQL — равно (или просто знак == )
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,Не забывай, что:
= это знак присвоения. Работает только с Set.
== это знак сравнения. Работает в операторе IF. Посмотри в коде Рекурсивный Dir /X (под спойлером) на сколько хорошо прослеживается логика вложенных условий.
Последнее редактирование:
Поделиться:
Ссылка
Назад
Сверху
Снизу
оператор if — ЕСЛИ СУЩЕСТВУЕТ C:\directory\ goto a else goto b проблемы пакетные файлы Windows XP
спросил
Изменено
4 года, 7 месяцев назад
Просмотрено
296 тысяч раз
всякий раз, когда я запускаю код
ниже, мне приходит в голову, что я сделал ошибку, используя строки, если существуют, так как независимо от того, существует ли каталог или нет, он действует так, как будто этой строки никогда не было. .. либо это, либо он не читает строку else.
эхо выключено эхо эхо (с) Райан Лич 2010 Система резервного копирования echo Stockmaster для эксклюзивного использования расходных материалов Riverland Paper Supplies эхо эхо Пожалуйста, убедитесь, что все компьютеры отсутствуют на складе, перейдите на экран Windows XP. эхо и что резервный USB-накопитель с отмеченным на нем днем недели вставлен Пауза ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_to_zip\ перейти к zipexist иначе перейти к zipexistпродолжить :zipexist ЕСЛИ СУЩЕСТВУЕТ d:\RPS_BACKUP\backups_old\ rd /s /q D:\RPS_BACKUP\backups_old эхо-резервное копирование не было завершено в прошлый раз, резервное копирование будет перезапущено с фазы zip-usb. Пауза позвоните на почтовый индекс прибраться :zipexistcontinue ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_old\ goto oldexists иначе oldexistscontinue :oldexists ЕСЛИ СУЩЕСТВУЕТ d:\RPS_BACKUP\backup_temp\ переименовать D:\RPS_BACKUP\backups_temp backups_to_zip rd /s /q D:\RPS_BACKUP\backups_old эхо-резервное копирование не было завершено в прошлый раз, резервное копирование будет перезапущено на этапе zip to usb. Пауза позвоните на почтовый индекс прибраться :oldexistscontinue ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_temp\ перейти к tempexists иначе перейти к tempexistscontinue :tempexists ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_old\ goto backupfailed иначе goto tempexistscontinue :backupfailed @rd /s /q D:\RPS_BACKUP\backups_temp эхо-резервное копирование не было завершено в прошлый раз, резервное копирование будет перезапущено с самого начала. Пауза :tempexistscontinue md D:\RPS_BACKUPS\backups_temp xcopy \\user1\c\* D:\RPS_BACKUP\backups_temp\user1\c /h /e /z /f /r /i /s /k ЕСЛИ НЕ ERRORLEVEL == 1 GOTO ErrorHandler xcopy C:\* D:\RPS_BACKUP\backups_temp\user2\c /h /e /f /r /i /s /k ЕСЛИ НЕ ERRORLEVEL == 1 GOTO ErrorHandler xcopy \\user3\c\* D:\RPS_BACKUP\backups_temp\user3\c /h /e /z /f /r /i /s /k ЕСЛИ НЕ ERRORLEVEL == 1 GOTO ErrorHandler позвони на суб позвоните на почтовый индекс :приборка переименовать резервные копии D:\RPS_BACKUP\backups_to_zip Пауза перейти: eof : обработчик ошибок echo xcopyerrorcode is ERRORLEVEL связаться с Райаном Пауза
- оператор if
- пакетный файл
- windows-xp
4
Используйте круглые скобки для группировки отдельных ветвей:
ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_to_zip\ (перейти к zipexist) иначе перейти к zipexistcontinue
В вашем случае синтаксический анализатор никогда не увидит , иначе
принадлежит , если
, потому что перейдет к
, с радостью примет все до конца команды. Вы можете увидеть аналогичную проблему при использовании эхо
вместо перейти к
.
Также использование круглых скобок позволит вам использовать операторы напрямую, без необходимости прыгать (хотя я не смог переписать ваш код, чтобы фактически использовать методы структурного программирования; возможно, это слишком рано или он не поддается блокировке). структуры, как код прямо сейчас).
3
Если вы хотите исключить какие-либо проблемы с частью else
, попробуйте удалить иначе
и поместите команду на новую строку. Вот так:
ЕСЛИ СУЩЕСТВУЕТ D:\RPS_BACKUP\backups_temp\ goto tempexists goto tempexistscontinue
0
Из справки ( если/?
):
Предложение ELSE должно находиться в той же строке, что и команда после IF. Для пример: ЕСЛИ СУЩЕСТВУЕТ имя файла. ( дел имя файла. ) ЕЩЕ ( эхо имя файла. отсутствующий. ) Следующее НЕ будет работать, потому что команду del необходимо завершить. по новой строке: ЕСЛИ СУЩЕСТВУЕТ имя файла. дел имя файла. ELSE эхо-имя файла. отсутствующий Следующее также не сработает, так как команда ELSE должна быть в той же строке в конце команды IF: ЕСЛИ СУЩЕСТВУЕТ имя файла. дел имя файла. ELSE эхо-имя файла. отсутствующий
3
В пакетном языке DOS есть ELSE? В те дни, когда я делал больше подобных вещей, такого не было.
Если моя теория верна, а ваше ELSE игнорируется, вам может быть лучше сделать
IF NOT EXIST file GOTO label
…что также сохранит вам строку кода (ту, что сразу после вашего IF).
Во-вторых, смутно припоминаю какой-то баг с проверкой на наличие каталогов. Жизнь была бы проще, если бы вы могли проверить наличие файла в этом каталоге. Если нет файла, в котором вы можете быть уверены, попробуйте что-нибудь (это работало до Win95, IIRC) будет заключаться в добавлении имени файла устройства NUL
к имени вашего каталога, например.
ЕСЛИ НЕ СУЩЕСТВУЕТ C:\dir\NUL GOTO ...
5
@эхо выключено :НАЧИНАТЬ временный каталог клс ЕСЛИ СУЩЕСТВУЕТ "временный\." (echo Временный каталог существует) else echo Временный каталог не существует эхо. временный каталог /A:D Пауза эхо. эхо. echo Обратите внимание, что каталог не найден эхо. echo Нажмите любую клавишу, чтобы создать временный каталог, cls и повторите проверку. Пауза Мкдир временный клс ЕСЛИ СУЩЕСТВУЕТ "временный\." (echo Временный каталог существует) else echo Временный каталог не существует эхо. временный каталог /A:D Пауза эхо. эхо нажмите любую клавишу, чтобы перейти к СТАРТ и удалить временный каталог Пауза перейти к СТАРТ
Для проверки DIRECTORIES вы не должны использовать что-то вроде:
если существует c:\windows\
Для правильной работы используйте:
если существует c:\windows\\.
обратите внимание на «.» в конце.
3
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
командная строка — пакетный файл Windows, если используется еще
спросил
Изменено
7 лет, 6 месяцев назад
Просмотрено
68 тысяч раз
Извините, я новичок в этом деле. Я хочу запускать в определенной последовательности один и тот же bat-файл с разными параметрами. Я написал очень простой командный файл:
@эхо выключено REM Примечание: чтобы увидеть все варианты использования командной строки, запустите bsearch_headless.bat без каких-либо аргументов. call behaviorsearch_headless.bat -p test_behaviorsearch.bsearch -o pippo ЭХО ЕСЛИ СУЩЕСТВУЕТ pippo.finalBests.csv (вызвать behaviorsearch_headless.bat -p test_behaviorsearch.bsearch -o topolino) иначе перейти :eof :эоф Конец симуляции ЭХО! ПАУЗА
Не работает, потому что иначе
не распознается.
Большое спасибо за любую помощь!
- окна
- командная строка
- пакет
- пакетный файл
2
Из документации , если
в командной строке (через справку , если
, или также доступно в TechNet).
Предложение ELSE должно находиться в той же строке, что и команда после
ЕСЛИ. Например:ЕСЛИ СУЩЕСТВУЕТ имя файла. ( дел имя файла. ) ЕЩЕ ( эхо имя файла. отсутствующий. )Следующее НЕ будет работать, потому что команда del должна быть
заканчивается новой строкой:ЕСЛИ СУЩЕСТВУЕТ имя файла. дел имя файла. ELSE эхо-имя файла. отсутствующийСледующее также не сработает, так как команда ELSE должна быть
та же строка, что и в конце команды IF:ЕСЛИ СУЩЕСТВУЕТ имя файла. дел имя файла. ELSE эхо-имя файла. отсутствующий
Итак, ваш скрипт заработал бы, если бы вы заменили
IF EXIST pippo.finalBests.csv (вызвать behaviorsearch_headless.bat -p test_behaviorsearch.bsearch -o topolino) иначе перейти :eof
С
ЕСЛИ СУЩЕСТВУЕТ pippo.finalBests.csv (вызов behaviorsearch_headless.bat -p test_behaviorsearch.bsearch -o topolino) иначе перейти к :eof
ИЛИ
ЕСЛИ СУЩЕСТВУЕТ pippo.finalBests.csv (
call behaviorsearch_headless.