kraeved
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору bomzz Консольной программе доступны несколько каналов для оповещения о состоянии работы. Нас интересуют stdout, stderr и errorlevel. Первый канал (standard output) задуман для отчёта о решаемой задаче, второй канал (standard error) — для отчёта об ошибках. То, что мы видим на экране, собирается из этой пары каналов, но машина по-прежнему видит их по отдельности. Команда 2>&1, подобно переключению ж/д стрелки, направляет второй канал в первый канал, сводя поступающие сообщения воедино для «глаз» машины. Их можно скрыть во тьме >nul, записать в >файл или дописать в его >>конец, передать другой программе через «трубу» |. Третий канал (errorlevel) — это код завершения, обычно принимающий значение 0 (успех) или 1 (ошибка). Если сетевой код типа 404 (ресурса нет) иногда виден в браузере, то код errorlevel остаётся улавливать. На деле каналы используют как бог на душу положит. Скажем, прогресс сжатия через 7-zip видим в stdout, а прогресс lame или curl видим уже в stderr. Или, например, код 0 у diff означает, что сравниваемые файлы одинаковы, 1 — отличаются, 2 — ошибка. Baltazar500 С adb 31.0.2 работает без зависаний. Убрав 2>&1 и >nul, увидите поступающие сообщения. @echo off rem Нет adb devices 2>&1 | findstr /i "woof" >nul && echo Да || echo Нет adb kill-server rem Да adb devices 2>&1 | findstr /i "list" >nul && echo Да || echo Нет adb kill-server rem Нет adb devices 2>&1 | findstr /i "woof" >nul if errorlevel 1 (echo Нет) else (echo Да) adb kill-server rem Да adb devices 2>&1 | findstr /i "list" >nul if errorlevel 1 (echo Нет) else (echo Да) adb kill-server goto :eof | |
| Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 01:06 13-06-2021 | Исправлено: kraeved, 23:47 14-06-2021 |
|