Эксперт С++
8703 / 4250 / 946
Регистрация: 15.11.2014
Сообщений: 9,641
1

[BAT] непонятка с эхо-отображением простого текста

03.05.2017, 21:45. Показов 601. Ответов 6
Метки нет (Все метки)

добрый вечер.

следующий скрипт работает в точности так, как ожидается:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if not "%eCOMPILLERTAG%"=="mingw" exit /b
 
if "%eADDRESSMODEL%"==""     set PATH=%PATH_MINGW32%;%PATH%
if "%eADDRESSMODEL%"=="none" set PATH=%PATH_MINGW32%;%PATH%
if "%eADDRESSMODEL%"=="32"   set PATH=%PATH_MINGW32%;%PATH%
if "%eADDRESSMODEL%"=="64"   set PATH=%PATH_MINGW64%;%PATH% 
 
where gcc >nul 2>nul
if errorlevel 1 (
    @echo [ERROR] can not determine the version of the mingw-gcc
    @echo [ERROR] compiler not founded
    @echo [ERROR] check PATH or global_settings.bat
    exit /b 1
)
 
for /F "tokens=1,2,3 delims=." %%i in ('gcc -dumpversion') do set version_gcc=%%i%%j%%k
set eCOMPILLERTAG=%eCOMPILLERTAG%%version_gcc%
но если исправить текст mingw-gcc на mingw (gcc)
то логика работы нарушается.
в консольке постоянно отображается ошибка.
то бишь ветка if errorlevel 1 (
срабатывает вне зависимости от того, была ли на самом деле ошибка,
или нет.

кто нибудь может объяснить, что это за бред такой?
и как это лечится.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2017, 21:45
Ответы с готовыми решениями:

Непонятка с Bat-файлом
Друзья! есть батник cls net time \\server /set /yes net use G: \\server \shared /USER:OlegP...

Bat, который создаёт другой bat с командами на изменение текста
Здравствуйте, я новичок в этом деле нужно создать bat файл, который создаст сначало текстовый...

Комментарии к коду эхо-клиент/эхо-сервер
Ребятки ,нужна очень ваша помощь !!! кому не тяжело напишите пожалуйста коментарии к кодам...

Проблемы с отображением текста
Поставил себе тему с сайта www.skinpacks.com, и теперь когда открываю папки не корректно...

6
4325 / 2115 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.05.2017, 23:09 2
Windows Batch file
1
@echo [ERROR] can not determine the version of the mingw ^(gcc^)
1
4254 / 1597 / 275
Регистрация: 10.12.2013
Сообщений: 5,582
03.05.2017, 23:14 3
во-первых, у where есть ключик /q,

а по сути вопроса "кто нибудь может объяснить, что это за бред такой и как это лечится?"
есть совет - "забей";
сам Майкрософт брезгливо дистанциируется от всех несуразностей, глупостей и ошибок,
которые связаны интерпретатором cmd.

( далеко ходить не будем, в соседнем вопросе Переименовать файлы по маске на всех дисках, например, можно подсмотреть, что команда
del *.htm
удалит
aa1.htm
aaa2.html
aaaa3."html and other files"

)
2
Эксперт WindowsАвтор FAQ
17815 / 7551 / 889
Регистрация: 25.12.2011
Сообщений: 11,300
Записей в блоге: 17
10.05.2017, 17:36 4
hoggy, это из-за порядка интерпретации специальных символов.
Спецсимволы нужно экранировать, если требуется рассматривать их как литералы.

Цитата Сообщение от hoggy
то бишь ветка if errorlevel 1 ( срабатывает вне зависимости от того, была ли на самом деле ошибка,
если вы присмотритесь в вывод консоли, то эта ветка в обоих случаях не срабатывает.

С экранированием:

Windows Batch file
1
2
3
4
5
C:\Users\Alex\Desktop\test>if errorlevel 1 (
echo [ERROR] can not determine the version of the mingw (gcc)
 echo [ERROR] compiler not founded
 echo [ERROR] check PATH or global_settings.bat
)
(условный блок включает все команды echo)

Без:

Windows Batch file
1
2
3
4
5
6
7
C:\Users\Alex\Desktop\test>if errorlevel 1 (echo [ERROR] can not determine the version of the mingw (gcc )
 
C:\Users\Alex\Desktop\test>echo [ERROR] compiler not founded
[ERROR] compiler not founded
 
C:\Users\Alex\Desktop\test>echo [ERROR] check PATH or global_settings.bat
[ERROR] check PATH or global_settings.bat
(под условный блок if попадает только первая строка с echo, остальные выполняются всегда)

Дело в том, что у скобок "(" и ")" немного отличаются приоритеты.

(echo [ERROR] can not determine the version of the mingw (gcc )
Если "(" написана в качества аргумента команды (или в средине аргумента), то она не считается спецсимволом и для неё не ищется пара при синтаксическом разборе.

if errorlevel 1 (
echo [ERROR] can not determine the version of the mingw (gcc )
А вот ")" - считается. Именно поэтому она была воспринята в качестве закрывающейся для той первой скобки (.

Т.е. достаточно ставить одну птичку:
Windows Batch file
1
@echo [ERROR] can not determine the version of the mingw (gcc^)
2
Joey
10.05.2017, 22:59
  #5

Не по теме:

Цитата Сообщение от volodin661 Посмотреть сообщение
сам Майкрософт брезгливо дистанциируется от всех несуразностей, глупостей и ошибок,
которые связаны интерпретатором cmd.
Наконец-то я услышал эти слова от кого-то, я думал, это мои подозрения. Не подскажете, где почитать что-нибудь про это?
Правда, я также слышал, что cmd - это внутренняя разработка для нужд самих сотрудников Майкрософт, если это правда, то претензий быть не может.

Цитата Сообщение от Dragokas Посмотреть сообщение
Дело в том, что у скобок "(" и ")" немного отличаются приоритеты.
Как мини-лекцию прочитал.

0
4254 / 1597 / 275
Регистрация: 10.12.2013
Сообщений: 5,582
11.05.2017, 09:52 6
Цитата Сообщение от Dragokas Посмотреть сообщение
Дело в том, что у скобок "(" и ")" немного отличаются приоритеты.
Приоритеты ???

Никакого STA (дерева синтаксического разбора) у cmd нет,
просто конструкция IF ( или DO ) допускает появление скобок и, как только встретилась после IF открытая скобка,
в пару к ней ожидается закрытая; первая же попавшаяся будет признана таковой,
если, конечно же, до этого не случится вложенный IF или DO(тоже со скобками), который, будучи обработан рекурсивно,
сам схватит первым закрывающую скобку.


Всё это совершенно очевидно,
не очевидна только причина того, зачем я распространяюсь на эту тему, хотя сам же выше советовал "забить".
0
Dragokas
12.05.2017, 16:51     [BAT] непонятка с эхо-отображением простого текста
  #7

Не по теме:


volodin661, всё гораздо сложнее.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2017, 16:51

Проблема С Отображением Текста В Сообщениях В 1с 7.7
Доброе время суток всем! У меня возникла проблема с 1С 7.7. Когда программа должна выкидывать...

Проблемы с отображением текста из XML
У меня такой вопрос по теме.....загружаю XML и вытаскиваю текст в текстовое поле но у меня текст...

Проблемы с отображением текста в окнах программ
Всем доброго времени суток. Кто может помочь по нижеизложенной проблемы просьба помочь. В некоторых...

В ярлыках браузеров emorhc.bat rehcnual.bat xoferif.bat erolpxei.bat
В ярлыках браузеров встроились вирусы и при открытии открывается реклама


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru