Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
1

Как работает && (оператор условной обработки команд)?

09.09.2015, 10:17. Просмотров 1558. Ответов 10
Метки нет (Все метки)

Приветствую !

Windows Batch file
dir D:\TMP\* /a-d 2>nul >nul && echo есть файлы
Обьясните, пожалуйста, почему это работает ? )
Разве команда после && не должна выполняться в любом случае ?

Заранее спасибо.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2015, 10:17
Ответы с готовыми решениями:

Объединение команд в одну строку; CMD & bash.exe
cd C:\tools\cygwin\bin\ & bash.exe & cd /cygdrive/c Первая команда переход в...

Условная команда с использованием операторов && или ||
Здравствуйте. Помогите пожалуйста с задачками по командной строке. 2.2.7...

Как экранировать спецсимвол & ?
Как экранировать спецсимвол & ? всяко разно пробовал ничего не вышло........

Прямая трасляция P&P
Чез час начинаеться прямая трасляция P&P/ Добавлено через 46 минут ...

Super Hide & Bat
Нужен батник который,с указаной папки снимет маску SuperHide и всех ее...

10
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
09.09.2015, 11:50 2
Лучший ответ Сообщение было отмечено vavun как решение

Решение

vavun,
Цитата Сообщение от vavun Посмотреть сообщение
Разве команда после && не должна выполняться в любом случае ?
Нет не должна, только при успешном выполнении команды перед &&.
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
09.09.2015, 12:08 3
Лучший ответ Сообщение было отмечено vavun как решение

Решение

vavun, видимо && и || работают по коду возврата команды. Если %errorlevel% равен 0 то срабатывает &&

Добавлено через 1 минуту
нашел в справочнике
Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
09.09.2015, 12:22 4
vavun, А вот || работает наоборот, если перед || команда не выполнена, тогда будет выполнена команда после ||

Добавлено через 6 минут
sov44, Эти команды отрабатывают свое назначение без errorlevel, его можно применить дополнительно, если покруче ситуация, неотработала первая команда, по которой есть своя специфическая ошибка по errorlevel (номер), при этом отработала вторая команда, по которой может быть такой же (подобный) вывод.
1
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
09.09.2015, 12:33 5
Цитата Сообщение от alpap Посмотреть сообщение
неотработала первая команда,
как машина поймёт, отработала команда или нет? По коду возврата. 0 - успешно, 1 - не успешно.
На одном из форумов писали, что вероятность верной отработки && || выше, если сначала следует && а затем ||
0
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,534
09.09.2015, 12:38 6
...Продолжим путешествие в мир логики
Оператор && гарантирует, что вторая команда будет выполнена только, если первая была выполнена успешно, т.е. с нулевым кодом возврата. Урок bat-аники. RSDN.
В C#: x && y — логическое И. Если первый операнд имеет значение false, то C# не вычисляет второй операнд. Это называется сокращенным (ленивым) вычислением.
Так как если x равен false, то y не вычисляется, поскольку результат операции И будет false независимо от того, какие значения имеет y.Из справочника msdn.
А вообще это называется оценка короткого замыкания или оценка Маккарти и свойственна ЯП вроде С\С++.
1
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
09.09.2015, 12:52 7
Garry Galler, С Вашим высказываем спорить не буду, имел ввиду вариант
Windows Batch file
1
2
3
команда&& команда
код
if errorlevel
вот здесь невыполненная вторая команда сработает уже по конкретному errorlevel, а первой на него начихать, если не прав, объясните.
0
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,534
09.09.2015, 14:38 8
alpap,
Не совсем понял, что имеется ввиду.
Но попробую на другом примере пояснить. Оператор && в cmd в любом случае зависит от значения errorlevel, которое вернет программа\команда. Если она вернет не 0 (что равносильно значению false для первого (левого) операнда), то второй операнд (справа от && ) даже проверяться не будет.
Так уж сложилось исторически, что все консольные программы должны возвращать код успеха\провала операции. И это код должен отличаться от 0 в случае не успешности операции. Большинство программ следуют этому правилу. К примеру моя FolderDialogEx.
Попробуем ее выполнить с несуществующей опцией в качестве первой операции и добавим смену каталога как вторую операцию :
Код
FolderDialogEx /qwerty && cd /d c:\   // код возврата был не нулевым и каталог останется прежним
Теперь введем правильную опцию:
Код
FolderDialogEx /? && cd /d c:\          // код возврата 0 и каталог изменится на  c:\>
PS: Если же программе не следует общепринятым правилам (0 - успех), вот тогда полагаться на оператор && не стоит и нужно либо самостоятельно проверять errorlevel на тот или иной код, либо какие-то еще условия использовать.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
09.09.2015, 17:42 9
Garry Galler,
Цитата Сообщение от Garry Galler Посмотреть сообщение
PS: Если же программе не следует общепринятым правилам (0 - успех), вот тогда полагаться на оператор && не стоит и нужно либо самостоятельно проверять errorlevel на тот или иной код, либо какие-то еще условия использовать.
- вот именно это и хотелось знать, огромное спасибо за разъяснение, т.е. как я понял локальная проверка может происходить по камандам &&,||, но глобальная по errorlevel всегда останется определяющей, заключительным звеном, цепочку из них &&(||)+errrorlevel, нельзя (невозможно) составлять.
0
vavun
09.09.2015, 17:47  [ТС]
  #10

Не по теме:

Мужики, остановитесь :D

0
alpap
09.09.2015, 18:21     Как работает && (оператор условной обработки команд)?
  #11

Не по теме:

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

0
09.09.2015, 18:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2015, 18:21
Привет! Вот еще темы с ответами:

Active Dirrectory & IIS
господа, сведующие в сем деле - мой к вам вопрос: сейчас передо мной стоят...

Citrix xenAPP & xenDesktop
Всем привет. Нужно несколько советов от опытных сисадминов. Во первых не судите...

Windows 7 Pro & MAK на много машин
Как узнать сколько ещё машин можно активировать MAK ключем?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru