Else if bat: if statement — Batch — If, ElseIf, Else

Hobby Horse Bat [Replace] — GTA5-Mods.com

Загрузить

flying_bulletzzz

All Versions

 1.0 (current)

3 166 загрузки , 1,6 МБ

18 марта 2020

More mods by flying_bulletzzz:
  • Одежда
  • Служебные
  • Маски

Avon M50 Gas Mask [MP Freemode]

By flying_bulletzzz

  • Метательное

MK2 Frag Grenade [Animated]

1.0

By flying_bulletzzz

  • СМГ

Thompson M1A1 [Animated]

1.0

By flying_bulletzzz

  • Рукопашное

Rusty Axe [Replace]

1.0

By flying_bulletzzz

  • Пистолеты

FN Five-seveN [Animated]

1.0

By flying_bulletzzz

5.0 / 5 звёзд (5 голосов)

Don’t ask why, just download.

Install in:
mods > update > x64 > dlcpacks > patchday3ng > dlc. rpf > x64 > models > cdimages > weapons.rpf

You may upload this file somewhere else if proper credit is given.

Have fun.

Changelog:

1.0
-Initial release

Show Full Description

Рукопашное


Первая загрузка:
18 марта 2020



Последнее обновление:
18 марта 2020



Последнее скачивание:
вчера

All Versions

 1.0 (current)

3 166 загрузки , 1,6 МБ

18 марта 2020

More mods by flying_bulletzzz:
  • Одежда
  • Служебные
  • Маски

Avon M50 Gas Mask [MP Freemode]

By flying_bulletzzz

  • Метательное

MK2 Frag Grenade [Animated]

1.0

By flying_bulletzzz

  • СМГ

Thompson M1A1 [Animated]

1. 0

By flying_bulletzzz

  • Рукопашное

Rusty Axe [Replace]

1.0

By flying_bulletzzz

  • Пистолеты

FN Five-seveN [Animated]

1.0

By flying_bulletzzz

  •  Description

  •  Comments (7)

Don’t ask why, just download.

Install in:
mods > update > x64 > dlcpacks > patchday3ng > dlc.rpf > x64 > models > cdimages > weapons.rpf

You may upload this file somewhere else if proper credit is given.

Have fun.

Changelog:

1.0
-Initial release

Рукопашное


Первая загрузка:
18 марта 2020



Последнее обновление:
18 марта 2020



Последнее скачивание:
вчера

оператор if — Пакет — If, ElseIf, Else

спросил

Изменено
2 года, 1 месяц назад

Просмотрено
251 тысяч раз

Что не так с этим кодом?

 ЕСЛИ "%language%" == "de" (
    перейти на язык DE
) ЕЩЕ (
    ЕСЛИ "%language%" == "en" (
    перейти на языкEN
) ЕЩЕ (
    эхо Не найдено. 
)
 

Я не очень хорошо разбираюсь в Batch.

1

 @эхо выключено
название Тест
эхо Выберите язык. (нем./англ.)
установить /p язык=
ЕСЛИ /i "%language%"=="de" перейти к языкуDE
ЕСЛИ /i "%language%"=="ru" перейти к языкуEN
эхо Не найдено.
идти к общему выходу
:languageDE
эхо немецкий
идти к общему выходу
:languageEN
эхо английский
идти к общему выходу
:commonexit
Пауза
 

Дело в том, что пакет просто продолжает выполнять инструкции, строка за строкой, пока не достигнет перейти к , выйти или конец файла. Он не имеет концепции секций для управления потоком.

Следовательно, ввод de приведет к переходу к :languagede , затем просто продолжит выполнение инструкций, пока файл не закончится, показывая de , затем en , затем not found .

2

 @эхо выключено
установить "язык = де"
ЕСЛИ "%language%" == "de" (
    перейти на язык DE
) ЕЩЕ (
    ЕСЛИ "%language%" == "en" (
        перейти на языкEN
    ) ЕЩЕ (
        эхо Не найдено. 
    )
)
:languageEN
:languageDE
эхо %язык%
 

Это работает, но я не знаю, как определена ваша языковая переменная. В ее определении есть пробелы.

1

пакетные файлы выполняют простую замену строк переменными.
Итак, простой

 goto :language%language%
эхо не найдено
...
 

делает это без необходимости if.

1

Рекомендация. Не используйте добавленные пользователем операторы REM для блокировки пакетных шагов. Вместо этого используйте условный GOTO.
Таким образом, вы можете предварительно определить и протестировать шаги и параметры. Пользователи также получают гораздо более простые изменения и большую уверенность.

 @Эхо включено
rem Использование флагов для управления выполнением команды
УСТАНОВИТЬ ExecuteSection1 = 0
УСТАНОВИТЬ ExecuteSection2 = 1
@эхо выключено
ЕСЛИ %ExecuteSection1%==0 GOTO EndSection1
ЭХО Раздел 1 Здесь
: EndSection1
ЕСЛИ %ExecuteSection2%==0 GOTO EndSection2
ЭХО Раздел 2 Здесь
: EndSection2
 
 @эхо выключено
цвет 0а
установить /p язык=
если %language% == DE (
    перейти к LGDE
) еще (
    если %language% == EN (
    перейти к LGEN
    ) еще (
    эхо н/д
)
: LGDE
(код)
:ЛГЕН
(код)
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Оператор

if — Как использовать структуру if-else в пакетном файле?

спросил

Изменено
2 года, 11 месяцев назад

Просмотрено
894к раз

У меня есть вопрос о структуре if-else в пакетном файле. Каждая команда запускается отдельно, но я не мог безопасно использовать блоки «если-иначе», поэтому эти части моей программы не работают. Как я могу заставить эти части работать? Спасибо.

 ЕСЛИ %F%==1 ЕСЛИ %C%==1 (
    :: копирование файла c в d
    скопировать "%sourceFile%" "%destinationFile%"
    )
ИНАЧЕ ЕСЛИ %F%==1 ЕСЛИ %C%==0 (
    :: перемещение файла c в d
    переместить "%sourceFile%" "%destinationFile%"
    )
ИНАЧЕ ЕСЛИ %F%==0 ЕСЛИ %C%==1 (
    ::копирование каталога c из d, /s: boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )
ИНАЧЕ ЕСЛИ %F%==0 ЕСЛИ %C%==0 (
    ::перемещение каталога
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )
 
  • пакетный файл
  • оператор if

4

Неверный синтаксис. Вы не можете использовать ELSE IF . Похоже, вам это все равно не нужно. Просто используйте несколько операторов IF :

 IF %F%==1 IF %C%==1 (
    :: копирование файла c в d
    скопировать "%sourceFile%" "%destinationFile%"
    )
ЕСЛИ %F%==1 ЕСЛИ %C%==0 (
    :: перемещение файла c в d
    переместить "%sourceFile%" "%destinationFile%"
    )
ЕСЛИ %F%==0 ЕСЛИ %C%==1 (
    ::копирование каталога c из d, /s: boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )
ЕСЛИ %F%==0 ЕСЛИ %C%==0 (
    ::перемещение каталога
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )
 

Ссылка на отличный пакетный файл: http://ss64.com/nt/if.html

8

Я думаю, что в вопросе и в некоторых ответах есть небольшая путаница в отношении значения этого псевдокода в DOS: IF A IF B X ELSE Y. Это не означает IF (A и B) THEN X ELSE Y, но на самом деле означает ЕСЛИ А (ЕСЛИ В, ТО Х, ИНАЧЕ Y). Если проверка A не пройдена, то все внутреннее условие if-else будет проигнорировано.

Как упоминалось в одном из ответов, в этом случае только один из тестов может быть успешным, поэтому «иначе» не требуется, но, конечно, это работает только в этом примере, это не общее решение для выполнения if-else .

Это можно обойти множеством способов. Вот несколько идей, все довольно уродливые, но эй, это (или, по крайней мере, был) DOS!

 @эхо выключено
установить один = 1
установить два = 2
РЭМ Пример 1
ЕСЛИ %один%_%два%==1_1 (
   эхо Пример 1 не работает
) ИНАЧЕ, ЕСЛИ %one%_%two%==1_2 (
   echo Пример 1 работает корректно
) ЕЩЕ (
    эхо Пример 1 не работает
)
РЭМ Пример 2
установить test1result = 0
установить test2result = 0
если %one%==1 если %two%==1 установить test1result=1
если %one%==1 если %two%==2 установить test2result=1
ЕСЛИ %test1result%==1 (
   эхо Пример 2 не работает
) ИНАЧЕ, ЕСЛИ %test2result%==1 (
   echo Пример 2 работает правильно
) ЕЩЕ (
    эхо Пример 2 не работает
)
РЭМ Пример 3
если %one%==1 если %two%==1 (
   эхо Пример 3 не работает
   перейти: endoftests
)
если %one%==1 если %two%==2 (
   echo Пример 3 работает правильно
   перейти: endoftests
)
эхо Пример 3 не работает
)
:эндофтесты
 

1

Насколько я знаю, вы не можете сделать , если еще в пакетном режиме, как вы можете на других языках, он должен быть вложенным , если .

Использование вложенного , если ваша партия будет выглядеть как

 IF %F%==1 IF %C%==1(
    :: копирование файла c в d
    скопировать "%sourceFile%" "%destinationFile%"
    ) ЕЩЕ (
        ЕСЛИ %F%==1 ЕСЛИ %C%==0(
        :: перемещение файла c в d
        переместить "%sourceFile%" "%destinationFile%"
        ) ЕЩЕ (
            ЕСЛИ %F%==0 ЕСЛИ %C%==1(
            ::копирование каталога c из d, /s: boş olanlar hariç, /e:boş olanlar dahil
            xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
            ) ЕЩЕ (
                ЕСЛИ %F%==0 ЕСЛИ %C%==0(
                ::перемещение каталога
                xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
                rd /s /q "%sourceMoveDirectory%"
                )
            )
        )
    )
 

или, как предложил Джеймс, соедините ваши , если , однако я думаю, что правильный синтаксис —

 IF %F%==1 IF %C%==1(
    :: копирование файла c в d
    скопировать "%sourceFile%" "%destinationFile%"
    )
 

5

вот как я справился с ситуацией if else if

 if %env%==dev (
    echo "dev env selected selected"
) еще (
    если %env%==продукт (
        echo "Выбрано окружение prod"
    )
)
 

Примечание это не то же самое, что блок if-elseif, как в других языках программирования, таких как C++ или Java, но он будет делать то, что вам нужно

Я думаю, вы можете использовать что-то вроде

, если ___ (
сделай это
) иначе, если ___ (
сделай это
)
 

3

Немного запоздало и, возможно, все еще хорошо для сложных условий if, потому что я хотел бы добавить параметр «выполнено», чтобы сохранить структуру if-then-else:

 set done=0
если %F%==1 если %C%==0 (установить done=1 и найти эхо F=1 и C=0: %F% + %C%)
если %F%==2 если %C%==0 (установить done=1 и найти эхо F=2 и C=0: %F% + %C%)
если %F%==3 если %C%==0 (установить done=1 и найти эхо F=3 и C=0: %F% + %C%)
если %done%==0 (эхо сделать что-то)
 

IF. ..ELSE IF конструкции очень хорошо работают в пакетных файлах, в частности, когда вы используете только одно условное выражение в каждой строке IF:

 IF %F%==1 (
    :: копирование файла c в d
    скопировать "%sourceFile%1" "%destinationFile1%"
) ИНАЧЕ, ЕСЛИ %F%==0 (
    :: перемещение файла e в f
    переместить "%sourceFile2%" "%destinationFile2%" )
 

В вашем примере используется конструкция типа IF...AND...IF , где одновременно должны выполняться 2 условия. В этом случае вы все еще можете использовать IF...ELSE IF конструкция, но с дополнительными круглыми скобками, чтобы избежать неопределенности для следующего условия ELSE:

 IF %F%==1 (IF %C%==1 (
    :: копирование файла c в d
    скопировать "%sourceFile1%" "%destinationFile1%" )
) ИНАЧЕ, ЕСЛИ %F%==1 (ЕСЛИ %C%==0 (
    :: перемещение файла e в f
    переместить "%sourceFile2%" "%destinationFile2%"))
 

Приведенная выше конструкция эквивалентна:

 IF %F%==1 (
    ЕСЛИ %С%==1 (
    :: копирование файла c в d
    скопировать "%sourceFile1%" "%destinationFile1%"
    ) ИНАЧЕ, ЕСЛИ %C%==0 (
    :: перемещение файла e в f
    переместить "%sourceFile2%" "%destinationFile2%"))
 

Последовательность обработки пакетных команд зависит от порядка разбора CMD. exe. Просто убедитесь, что ваша конструкция следует этому логическому порядку, и, как правило, она будет работать. Если ваш пакетный скрипт обрабатывается Cmd.exe без ошибок, значит, это правильная (т.е. поддерживаемая вашей версией ОС Cmd.exe) конструкция, даже если кто-то сказал обратное.

Вот мой пример кода для if..else..if
, которые делают следующее

Запрашивать у пользователя имя процесса

Если имя процесса неверный
Затем он пишет пользователю

 Ошибка: Процессор выше не существует
 

, если имя процесса services
, тогда он пишет пользователю

 Ошибка: вы не можете убить процессор выше
 

, если имя процесса действительное , а не сервисы
Тогда он пишет пользователю

процесс был убит через taskill

поэтому я назвал это Процесс killer.bat
Вот мой код:

 @echo off
:Начинать
Рем готовит партию
клс
Убийца процессоров
Цвет 0В
Echo Введите имя процессора, чтобы убить его (без «.