YuS
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf %node%%%node%%
Дальше вижу много подобных ошибок, не буду перечислять. Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная %node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%
ЗЫ: на самом деле, выделять %%(т.е. экранированный %) не надо, ибо оно и есть экранированием. %% справедливо выделить только в случаях %%N.
А вообще рекомендую запихнуть тестовые примеры в батник, и тупо запустить, и посмотреть как действительно шелл их понял(предварительно снабдить переменные значениями). В первом десятке примера сразу нашлись ошибки.
PS: перекрасил %. Темнокрасный - % в переменной.Зеленый - % как обычный символ который экранировали (по аналогии с \\ в кавычках где \ управляющий символ который иногда в тексте тоже нужно выидеть).
Posted: Fri Dec 25, 2015 2:17 am
by YuS
FeyFre wrote:YuS
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf %node%%%node%%
Не согласен, позже аргументирую... вернее не со всем согласен, многое зависит от контекста. Интерпретатор консоли очень своеобразен сам по себе.
FeyFre wrote:
Дальше вижу много подобных ошибок, не буду перечислять.
Огласите весь список, пожалуйста.
Ну, если в итоге, всё же, есть цель получить наиболее корректный bat.coder...
FeyFre wrote:
Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная %node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%
Не факт. Всё будет зависеть от контекста... а учесть, с помощью текущих возможностей кодера, эти моменты сложно, если вообще возможно.
Всё же, "%" - не символ экранирования, а оператор разыменования переменной, изначально... именно поэтому интерпретатор его "съедает" и иногда используют удваивание этого символа для представления литеры %, но, повторюсь, это не экранирование в чистом виде и зачастую удваивание используется в местах двойного раскрытия именно переменных.
FeyFre wrote:В первом десятке примера сразу нашлись ошибки.
Надо по пунктам разобрать, могу ведь и честно заблуждаться...
Может быть, имеет смысл в отдельный топик перебраться, чтобы здесь не уходить далеко от темы?
Posted: Fri Dec 25, 2015 5:49 am
by YuS
FeyFre, чтобы не быть совсем голословным, сделал несколько примеров особенностей консоли. ссылка
Posted: Fri Dec 25, 2015 8:55 am
by Lenchik
YuS
cmd vs bat - офигеть. Там пожизненное связывание переменных что ли?
А по первому тесту - вижу различия, но не понимаю что творится. Есть ссылка, где без особых рассусоливаний расписаны причины и, может, советы по применению даны?
Posted: Fri Dec 25, 2015 11:33 am
by YuS
Lenchik wrote:YuS
cmd vs bat - офигеть. Там пожизненное связывание переменных что ли?
Там похоже, что команда set сбрасывает errorlevel в cmd, а в bat-нике нет...
Lenchik wrote:
А по первому тесту - вижу различия, но не понимаю что творится. Есть ссылка, где без особых рассусоливаний расписаны причины и, может, советы по применению даны?
Ссылки нет, у меня сохранились только примеры, а где я их взял и читал об этом - за давностью стерлось из памяти... то ли на rsdn, то ли из книжки какой электронной, то ли ещё где попадалось, не помню в общем.
Там загвоздка именно в двойном раскрытии переменных с помощью call и кроме того, имеют значение операторы скобки "(...)".
ЗЫ А, вот, нашел на руборде, в теме про командную строку, в шапке есть ссылки на два урока bat-аники. Про раскрытие переменных вот здесь
Posted: Wed Dec 30, 2015 11:59 am
by Skif_off
Тут вдруг подумал, что должно всё-таки выглядеть так: set noderoot=%~dp0servers/%%nodename%%/conf
ведь по сути тут "%%nodename%%" передаётся команде set не как переменная, а как просто строка. И подсвечивать тут "%%" кажется не очень логичным, да и вообще.
А собственно переменная "%nodename%" будет раскрыта тут только при использовании переменной "%noderoot%", когда интерпретатор отбросит крайние символы процента в "%%nodename%%" и строка станет переменной.
Имя переменной в cmd может состоять из каких угодно символов? В некоторых языках очень удобно: имя "[A-Za-z0-9_]+" и всё.
Posted: Wed Dec 30, 2015 3:14 pm
by Skif_off
VladSh
В fb2 обнаружил баг с подсветкой атрибута в теге типа
Coder думает, что у нас тут экранированная кавычка, и всё ниже считает за строку, хотя мы тут экранируем обратный слэш.
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?
... Coder думает, что у нас тут экранированная кавычка, и всё ниже считает за строку, хотя мы тут экранируем обратный слэш.
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?
Хмм, Coder думает... есть над чем подумать человеку Шутка
А если серьёзно, то Coder, как раз выполняет то, что ему предписано... он "видит" слеш и находит совпадение по шаблону в отрицательном просмотре назад.
Тут бы лучше так сделать:
Огромная благодарность! Это работает как надо.
Надеюсь, пройдёт проверку временем (иногда такие тексты попадаются, сам не знаешь, что от них ожидать).
Posted: Fri Jan 22, 2016 11:24 pm
by Skif_off
Никто случайно не проверял, до скольки в среднем можно увеличить максимальный размер документа до отключения фолдинга? С учётом того, что далеко не все сидаят на топовом железе, конечно. По умолчанию 1000000 символов.
Сейчас чуть с ума не сошёл, прежде чем дошло, почему отключилась подсветка текста в кавычках в атрибутах XML ))