Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760

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

03.05.2017, 21:45. Показов 865. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2017, 21:45
Ответы с готовыми решениями:

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

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

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

6
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.05.2017, 23:09
Windows Batch file
1
@echo [ERROR] can not determine the version of the mingw ^(gcc^)
1
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
03.05.2017, 23:14
во-первых, у where есть ключик /q,

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

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

)
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.05.2017, 17:36
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
10.05.2017, 22:59

Не по теме:

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

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

0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
11.05.2017, 09:52
Цитата Сообщение от Dragokas Посмотреть сообщение
Дело в том, что у скобок "(" и ")" немного отличаются приоритеты.
Приоритеты ???

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


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

Не по теме:


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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2017, 16:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru