Руководство командная строка windows if

На чтение 5 мин Просмотров 3.5к. Опубликовано

В этой статье мы рассмотрим условный оператор 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, то круглые скобки необходимы.

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.

cmd if

Мы вправе использовать условный оператор 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

cmd if else

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

  • Overview
  • Part 1 – Getting Started
  • Part 2 – Variables
  • Part 3 – Return Codes
  • Part 4 – stdin, stdout, stderr
  • Part 5 – If/Then Conditionals
  • Part 6 – Loops
  • Part 7 – Functions
  • Part 8 – Parsing Input
  • Part 9 – Logging
  • Part 10 – Advanced Tricks

Computers are all about 1’s and 0’s, right? So, we need a way to handle when some condition is 1, or else do something different
when it’s 0.

The good news is DOS has pretty decent support for if/then/else conditions.

Checking that a File or Folder Exists

IF EXIST "temp.txt" ECHO found

Or the converse:

IF NOT EXIST "temp.txt" ECHO not found

Both the true condition and the false condition:

IF EXIST "temp.txt" (
    ECHO found
) ELSE (
    ECHO not found
)

NOTE: It’s a good idea to always quote both operands (sides) of any IF check. This avoids nasty bugs when a variable doesn’t exist, which causes
the the operand to effectively disappear and cause a syntax error.

Checking If A Variable Is Not Set

IF "%var%"=="" (SET var=default value)

Or

IF NOT DEFINED var (SET var=default value)

Checking If a Variable Matches a Text String

SET var=Hello, World!

IF "%var%"=="Hello, World!" (
    ECHO found
)

Or with a case insensitive comparison

IF /I "%var%"=="hello, world!" (
    ECHO found
)

Artimetic Comparisons

SET /A var=1

IF /I "%var%" EQU "1" ECHO equality with 1

IF /I "%var%" NEQ "0" ECHO inequality with 0

IF /I "%var%" GEQ "1" ECHO greater than or equal to 1

IF /I "%var%" LEQ "1" ECHO less than or equal to 1

Checking a Return Code

IF /I "%ERRORLEVEL%" NEQ "0" (
    ECHO execution failed
)


<< Part 4 – stdin, stdout, stderr


Part 6 – Loops >>

Как использовать условные операторы IF в командной строке Windows (CMD IF)

CMD if — это условный оператор в командной строке Windows, который позволяет выполнять определенные действия, основанные на заданных условиях.

Синтаксис команды if в CMD выглядит следующим образом:

if [условие] команда

где [условие] — это логическое выражение, которое может содержать операторы сравнения (==, !=, <, >, <=, >=), а также логические операторы (&& и ||) для объединения нескольких условий. При выполнении команды if, если [условие] истинно, то выполняется команда, которая идет после него.

Примеры использования команды if в CMD:

1. Проверка существования файла:

if exist example.txt (

echo Файл существует

) else (

echo Файл не найден

)

Эта команда проверяет существует ли файл example.txt в текущей директории. Если файл существует, то выводится сообщение «Файл существует», в противном случае выводится «Файл не найден».

2. Сравнение чисел:

set /a a=5

set /a b=10

if %a% LSS %b% (

echo %a% меньше %b%

) else (

echo %a% больше %b%

)

Эта команда выполняет сравнение двух переменных a и b. Если a меньше b, то выводится сообщение «5 меньше 10», в противном случае выводится «5 больше 10».

3. Проверка операционной системы:

if «%OS%»==»Windows_NT» (

echo Вы используете Windows

) else (

echo Вы используете другую операционную систему

)

Эта команда проверяет, используется ли операционная система Windows. Если переменная среды %OS% содержит строку «Windows_NT», то выводится сообщение «Вы используете Windows», в противном случае выводится «Вы используете другую операционную систему».

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

Команда IF. Описание, синтаксис, параметры, примеры

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

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

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.

cmd if

Мы вправе использовать условный оператор 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”, так как учет регистра знаков будет отключен.

СинтаксисSyntax

if [not] ERRORLEVEL <number> <command> [else <expression>]if [not] <string1>==<string2> <command> [else <expression>]if [not] exist <filename> <command> [else <expression>]

Если расширения команд включены, используйте следующий синтаксис:If command extensions are enabled, use the following syntax:

if [/i] <string1> <compareop> <string2> <command> [else <expression>]if cmdextversion <number> <command> [else <expression>]if defined <variable> <command> [else <expression>]

ПараметрыParameters

ПараметрParameter ОписаниеDescription
notnot Указывает, что команда должна выполняться, только если условие имеет значение false.Specifies that the command should be carried out only if the condition is false.
ERRORLEVEL <number>errorlevel <number> Задает истинное условие, только если предыдущая программа, выполненная Cmd.exe, вернула код выхода, который больше или равен Number.Specifies a true condition only if the previous program run by Cmd.exe returned an exit code equal to or greater than number.
<command> Указывает команду, которая должна быть выполнена при выполнении предыдущего условия.Specifies the command that should be carried out if the preceding condition is met.
<string1>==<string2> Задает истинное условие, только если строка1 и строка2 совпадают.Specifies a true condition only if string1 and string2 are the same. Эти значения могут быть строками литерала или пакетными переменными (например, %1 ).These values can be literal strings or batch variables (for example, %1). Литеральные строки не нужно заключать в кавычки.You do not need to enclose literal strings in quotation marks.
существующие <filename>exist <filename> Указывает истинное условие, если указанное имя файла существует.Specifies a true condition if the specified file name exists.
<compareop> Задает оператор сравнения из трех букв, включая:Specifies a three-letter comparison operator, including:

  • Равно — равноEQU – Equal to
  • Нек — не равноNEQ – Not equal to
  • ЛСС — меньшеLSS – Less than
  • LEQ -меньше или равноLEQ – Less than or equal to
  • ГТР — большеGTR – Greater than
  • Жек — больше или равноGEQ – Greater than or equal to
/i/i Принудительное сравнение строк не учитывает регистр.Forces string comparisons to ignore case. Параметр /i можно использовать в string1==string2 формате If.You can use /i on the string1==string2 form of if. Эти сравнения являются универсальными, в том случае, если и строка1 , и строка2 состоят из цифр, строки преобразуются в числа и выполняется числовое сравнение.These comparisons are generic, in that if both string1 and string2 are comprised of numeric digits only, the strings are converted to numbers and a numeric comparison is performed.
кмдекстверсион <number>cmdextversion <number> Задает истинное условие, только если внутренний номер версии, связанный с компонентом расширения команд Cmd.exe, равен или больше указанного числа.Specifies a true condition only if the internal version number associated with the command extensions feature of Cmd.exe is equal to or greater than the number specified. Первая версия — 1.The first version is 1. Он увеличивается на единицу при добавлении значительных улучшений в расширения команд.It increases by increments of one when significant enhancements are added to the command extensions. Кмдекстверсион Conditional не имеет значения true, если расширения команд отключены (по умолчанию расширения команд включены).The cmdextversion conditional is never true when command extensions are disabled (by default, command extensions are enabled).
defined <variable>defined <variable> Указывает истинное условие, если переменная определена.Specifies a true condition if variable is defined.
<expression> Задает команду командной строки и все параметры, которые будут переданы команде в предложении else .Specifies a command-line command and any parameters to be passed to the command in an else clause.
/?/? Отображение справки в командной строке.Displays help at the command prompt.
  • Если условие, указанное в предложении If , имеет значение true, выполняется команда, следующая за условием. Если условие имеет значение false, команда в предложении If игнорируется и команда выполняет любую команду, указанную в предложении else .If the condition specified in an if clause is true, the command that follows the condition is carried out. If the condition is false, the command in the if clause is ignored and the command executes any command that is specified in the else clause.

  • Когда программа останавливается, она возвращает код выхода.When a program stops, it returns an exit code. Чтобы использовать коды выхода в качестве условий, используйте параметр ERRORLEVEL .To use exit codes as conditions, use the errorlevel parameter.

  • При использовании определенногозначения в среду добавляются следующие три переменные: % ERRORLEVEL%, % кмдкмдлине% и % кмдекстверсион%.If you use defined, the following three variables are added to the environment: %errorlevel%, %cmdcmdline%, and %cmdextversion%.

    • % ERRORLEVEL%: разворачивается в строковое представление текущего значения переменной среды ERRORLEVEL.%errorlevel%: Expands into a string representation of the current value of the ERRORLEVEL environment variable. Эта переменная предполагает, что отсутствует существующая переменная среды с именем ERRORLEVEL.This variable assumes that there isn’t already an existing environment variable with the name ERRORLEVEL. Если это так, вместо него будет получено значение ERRORLEVEL.If there is, you’ll get that ERRORLEVEL value instead.

    • % кмдкмдлине%: разворачивается в исходную командную строку, которая была передана Cmd.exe до любой обработки Cmd.exe.%cmdcmdline%: Expands into the original command line that was passed to Cmd.exe prior to any processing by Cmd.exe. Предполагается, что отсутствует существующая переменная среды с именем КМДКМДЛИНЕ.This assumes that there isn’t already an existing environment variable with the name CMDCMDLINE. Если это так, вы получите вместо этого значение КМДКМДЛИНЕ.If there is, you’ll get that CMDCMDLINE value instead.

    • % кмдекстверсион%: разворачивается в строковое представление текущего значения кмдекстверсион.%cmdextversion%: Expands into the string representation of the current value of cmdextversion. Предполагается, что отсутствует существующая переменная среды с именем КМДЕКСТВЕРСИОН.This assumes that there isn’t already an existing environment variable with the name CMDEXTVERSION. Если это так, вы получите вместо этого значение КМДЕКСТВЕРСИОН.If there is, you’ll get that CMDEXTVERSION value instead.

  • Предложение else необходимо использовать в той же строке, что и команда после оператора If.You must use the else clause on the same line as the command after the if.

ПримерыExamples

Чтобы отобразить сообщение не удается найти файл данных если не удается найти файл Product. dat, введите:To display the message Cannot find data file if the file Product.dat cannot be found, type:

if not exist product.dat echo Cannot find data file

Чтобы отформатировать диск в диске а и вывести сообщение об ошибке при возникновении ошибки в процессе форматирования, введите в пакетный файл следующие строки:To format a disk in drive A and display an error message if an error occurs during the formatting process, type the following lines in a batch file:

:begin@echo offformat a: /sif not errorlevel 1 goto endecho An error occurred during formatting.:endecho End of batch program.

Чтобы удалить файл Product. dat из текущего каталога или отобразить сообщение, если Product. dat не найден, введите в пакетном файле следующие строки:To delete the file Product.dat from the current directory or display a message if Product.dat is not found, type the following lines in a batch file:

IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)

Примечание

Эти строки можно объединить в одну строку следующим образом:These lines can be combined into a single line as follows:

IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)

Чтобы вывести значение переменной среды ERRORLEVEL после выполнения пакетного файла, введите в пакетный файл следующие строки:To echo the value of the ERRORLEVEL environment variable after running a batch file, type the following lines in the batch file:

goto answer%errorlevel%:answer1echo The program returned error level 1goto end:answer0echo The program returned error level 0goto end:endecho Done!

Чтобы вернуться к метке “хорошо”, если значение переменной среды ERRORLEVEL меньше или равно 1, введите:To go to the okay label if the value of the ERRORLEVEL environment variable is less than or equal to 1, type:

if %errorlevel% LEQ 1 goto okay

if утверждение

if Условия Bash могут иметь разные формы. Самое основное if утверждение принимает следующую форму:

if TEST-COMMANDthen STATEMENTSfi if

Заявление начинается с

if

ключевым словом , за которым следует условному выражение и

then

ключевым словом. Утверждение заканчивается

fi

ключевым словом.

Если TEST-COMMAND оценивается как True , STATEMENTS выполняется. Если TEST-COMMAND возвращается False , ничего не происходит, STATEMENTS игнорируется.

Как правило, рекомендуется всегда делать отступы для вашего кода и отделять блоки кода пустыми строками. Большинство людей предпочитают использовать отступы с 4 или 2 пробелами. Отступы и пустые строки делают ваш код более читабельным и упорядоченным.

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

#!/bin/bashecho -n “Enter a number: “read VARif [[ $VAR -gt 10 ]]then echo “The variable is greater than 10.”fi

Сохраните код в файле и запустите его из командной строки:

bash test.sh

Скрипт предложит вам ввести номер. Например, если вы введете 15, test команда выполнит оценку, true потому что 15 больше 10, и echo команда внутри then предложения будет выполнена.

The variable is greater than 10.

Дополнительные ссылкиAdditional References

  • Условные обозначения синтаксиса команд командной строкиCommand-Line Syntax Key

  • GOTO, командаgoto command

Файлы для скачивания

Все файлы, описанные в статье, можно скачать с Яндекс.Диска.

  • Скачать bat файлы с реализацией операторов AND и OR
  • Скачать все скрипты

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

if not exist product.dat echo Не найден файл данных

Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:

:begin@echo offformat a: /sif not errorlevel 1 goto endecho Ошибка при форматировании.:endecho Конец пакетной программы.

Если ошибка не возникнет, сообщение об ошибке выведено не будет.

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

if exist c:mydirnul goto process

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Тестовые операторы 

В Bash test команда принимает одну из следующих синтаксических форм:

test EXPRESSION[ EXPRESSION ][[ EXPRESSION ]]

Чтобы сделать скрипт переносимым, предпочтите использовать старую [ команду test, которая доступна во всех оболочках POSIX. Новая обновленная версия test команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Чтобы отменить тестовое выражение, используйте логический оператор NOT ( ! ). При сравнении строк всегда используйте одинарные или двойные кавычки, чтобы избежать проблем с разбивкой слов.

Ниже приведены некоторые из наиболее часто используемых операторов:

  • -n VAR – Истина, если длина VAR больше нуля.
  • -z VAR – Правда, если VAR пусто.
  • STRING1 = STRING2 – Правда, если STRING1 и STRING2 равны.
  • STRING1 != STRING2 – Правда если STRING1 и STRING2 не равны.
  • INTEGER1 -eq INTEGER2 – Правда, если INTEGER1 и INTEGER2 равны.
  • INTEGER1 -gt INTEGER2 – Верно, если INTEGER1 больше чем INTEGER2 .
  • INTEGER1 -lt INTEGER2 – Правда, если INTEGER1 меньше, чем INTEGER2 .
  • INTEGER1 -ge INTEGER2 – Истинно, если INTEGER1 равно или больше, чем INTEGER2.
  • INTEGER1 -le INTEGER2 – Верно, если INTEGER1 равно или меньше чем INTEGER2 .
  • -h FILE – Истина, если FILE существует и является символической ссылкой.
  • -r FILE – Истинно, если FILE существует и доступно для чтения.
  • -w FILE – Истина, если FILE существует и доступна для записи.
  • -x FILE – True, если FILE существует и является исполняемым.
  • -d FILE – True, если FILE существует и является каталогом.
  • -e FILE – Истинно, если FILE существует и является файлом, независимо от типа (узел, каталог, сокет и т. Д.).
  • -f FILE – True, если FILE существует и является обычным файлом (не каталогом или устройством).

Chaining IF commands (AND).

The only logical operator directly supported by IF is NOT , so to perform an AND requires chaining multiple IF statements:

I have a question about if — else structure in a batch file. Each command runs individually, but I couldn’t use «if — else» blocks safely so these parts of my programme doesn’t work. How can I do make these parts run? Thank you.

IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )
ELSE IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

ELSE IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )
ELSE IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )

mavhc's user avatar

asked Jun 18, 2012 at 11:21

eponymous's user avatar

4

Your syntax is incorrect. You can’t use ELSE IF. It appears that you don’t really need it anyway. Simply use multiple IF statements:

IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )

IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )

IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )

Great batch file reference: http://ss64.com/nt/if.html

answered Jun 18, 2012 at 11:29

James Hill's user avatar

James HillJames Hill

60.4k21 gold badges145 silver badges161 bronze badges

8

I think in the question and in some of the answers there is a bit of confusion about the meaning of this pseudocode in DOS: IF A IF B X ELSE Y. It does not mean IF(A and B) THEN X ELSE Y, but in fact means IF A( IF B THEN X ELSE Y). If the test of A fails, then he whole of the inner if-else will be ignored.

As one of the answers mentioned, in this case only one of the tests can succeed so the ‘else’ is not needed, but of course that only works in this example, it isn’t a general solution for doing if-else.

There are lots of ways around this. Here is a few ideas, all are quite ugly but hey, this is (or at least was) DOS!

@echo off

set one=1
set two=2

REM Example 1

IF %one%_%two%==1_1 (
   echo Example 1 fails
) ELSE IF %one%_%two%==1_2 (
   echo Example 1 works correctly
) ELSE (
    echo Example 1 fails
)

REM Example 2

set test1result=0
set test2result=0

if %one%==1 if %two%==1 set test1result=1
if %one%==1 if %two%==2 set test2result=1

IF %test1result%==1 (
   echo Example 2 fails
) ELSE IF %test2result%==1 (
   echo Example 2 works correctly
) ELSE (
    echo Example 2 fails
)

REM Example 3

if %one%==1 if %two%==1 (
   echo Example 3 fails
   goto :endoftests
)
if %one%==1 if %two%==2 (
   echo Example 3 works correctly
   goto :endoftests
)
echo Example 3 fails
)
:endoftests

wjandrea's user avatar

wjandrea

28.5k9 gold badges62 silver badges82 bronze badges

answered Apr 26, 2013 at 20:47

gtpunch's user avatar

gtpunchgtpunch

6415 silver badges3 bronze badges

1

AFAIK you can’t do an if else in batch like you can in other languages, it has to be nested if‘s.

Using nested if‘s your batch would look like

IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    ) ELSE (
        IF %F%==1 IF %C%==0(
        ::moving the file c to d
        move "%sourceFile%" "%destinationFile%"
        ) ELSE (
            IF %F%==0 IF %C%==1(
            ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
            xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
            ) ELSE (
                IF %F%==0 IF %C%==0(
                ::moving a directory
                xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
                rd /s /q "%sourceMoveDirectory%"
                )
            )
        )
    )

or as James suggested, chain your if‘s, however I think the proper syntax is

IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )

answered Jun 18, 2012 at 11:29

Bali C's user avatar

Bali CBali C

30.6k35 gold badges123 silver badges152 bronze badges

5

here is how I handled if else if situation

if %env%==dev ( 
    echo "dev env selected selected"
) else (
    if %env%==prod (
        echo "prod env selected"
    )
)

Note it is not the same as if-elseif block as the other programming languages like C++ or Java but it will do what you need to do

answered May 20, 2020 at 12:27

Amado Saladino's user avatar

I believe you can use something such as

if ___ (

do this

) else if ___ (

do this

)

Ophir Yoktan's user avatar

Ophir Yoktan

8,1897 gold badges59 silver badges106 bronze badges

answered Sep 29, 2014 at 9:21

user4090570's user avatar

3

A little bit late and perhaps still good for complex if-conditions, because I would like to add a «done» parameter to keep a if-then-else structure:

set done=0
if %F%==1 if %C%==0 (set done=1 & echo found F=1 and C=0: %F% + %C%)
if %F%==2 if %C%==0 (set done=1 & echo found F=2 and C=0: %F% + %C%)
if %F%==3 if %C%==0 (set done=1 & echo found F=3 and C=0: %F% + %C%)
if %done%==0 (echo do something)

answered Oct 2, 2016 at 11:21

Stefane's user avatar

IF...ELSE IF constructs work very well in batch files, in particular when you use only one conditional expression on each IF line:

IF %F%==1 (
    ::copying the file c to d
    copy "%sourceFile%1" "%destinationFile1%"
) ELSE IF %F%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%" )

In your example you use IF...AND...IF type construct, where 2 conditions must be met simultaneously. In this case you can still use IF...ELSE IF construct, but with extra parentheses to avoid uncertainty for the next ELSE condition:

IF %F%==1 (IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile1%" "%destinationFile1%" )
) ELSE IF %F%==1 (IF %C%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%"))

The above construct is equivalent to:

IF %F%==1 (
    IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile1%" "%destinationFile1%"
    ) ELSE IF %C%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%"))

Processing sequence of batch commands depends on CMD.exe parsing order. Just make sure your construct follows that logical order, and as a rule it will work. If your batch script is processed by Cmd.exe without errors, it means this is the correct (i.e. supported by your OS Cmd.exe version) construct, even if someone said otherwise.

Community's user avatar

answered Aug 8, 2016 at 2:36

sambul35's user avatar

sambul35sambul35

1,05814 silver badges22 bronze badges

Here’s my code Example for if..else..if

which do the following

Prompt user for Process Name

If the process name is invalid

Then it’s write to user

Error : The Processor above doesn't seem to be exist 

if the process name is services
Then it’s write to user

Error : You can't kill the Processor above 

if the process name is valid and not services
Then it’s write to user

the process has been killed via taskill

so i called it Process killer.bat
Here’s my Code:

@echo off

:Start
Rem preparing the batch  
cls
Title Processor Killer
Color 0B
Echo Type Processor name to kill It (Without ".exe")
set /p ProcessorTokill=%=%  

:tasklist
tasklist|find /i "%ProcessorTokill%.exe">nul & if errorlevel 1 (
REM check if the process name is invalid 
Cls 
Title %ProcessorTokill% Not Found
Color 0A
echo %ProcessorTokill%
echo Error : The Processor above doesn't seem to be exist    

) else if %ProcessorTokill%==services (
REM check if the process name is services and doesn't kill it
Cls 
Color 0c
Title Permission denied 
echo "%ProcessorTokill%.exe"
echo Error : You can't kill the Processor above 

) else (
REM if the process name is valid and not services
Cls 
Title %ProcessorTokill% Found
Color 0e
echo %ProcessorTokill% Found
ping localhost -n 2 -w 1000>nul
echo Killing %ProcessorTokill% ...
taskkill /f /im %ProcessorTokill%.exe /t>nul
echo %ProcessorTokill% Killed...
)

pause>nul



REM If else if Template
REM if thing1 (
REM Command here 2 ! 
REM ) else if thing2 (
REM command here 2 !
REM ) else (
REM command here 3 !
REM )

answered Feb 28, 2018 at 8:26

Oimar Daif's user avatar

Like this post? Please share to your friends:
  • Как встать на биржу труда через центр занятости пошаговая инструкция
  • Политическое руководство м с горбачева
  • Причины перехода советского руководства к новой экономической политике нэпу
  • Акварин удобрение для хвойных инструкция по применению
  • Что такое руководство по качеству в метрологии