User Menu: SET не присваивает переменной значение

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

Какой-то глюк в меню: пытаюсь составить сложную командную строку с параметрами, присвоив предварительно значение переменным, но столкнулся с каким-то глюком: SET некоторым переменным присваивает значения, а некоторым - нет. Если вместо SET подставить ECHO, то все отрабатывает нормально (переменные раскрываются и подставляются их значения), если использовать SET, то переменная вообще не инициализируется (последующий вызов ECHO вместо значения переменной печатает ее имя в процентах, например %variable% вместо значения).

Вот из файла меню:

Code: Select all

    set percent=50
    IF NOT "%percent%"=="" SET resize= -resize %percent% %percent% -rtype lanzos
    IF "%percent%" NEQ "" SET resizeInfo=rsz=%percent%%,
    set quality=!?Quality (1..100):?80!
    echo percent==%percent%    resize==%resize%   resizeInfo==%resizeInfo%   quality=%quality%
    echo  %resize%  -q %quality%
Выводит следующее:

Code: Select all

percent==50    resize==%resize%   resizeInfo==%resizeInfo%   quality=80
 %resize%  -q 80
[/color]
ECHO вместо SET:

Code: Select all

    set percent=50
    IF NOT "%percent%"=="" ECHO resize= -resize %percent% %percent% -rtype lanzos
    IF "%percent%" NEQ "" ECHO resizeInfo=rsz=%percent%%,
    set quality=!?Quality (1..100):?80!
    echo percent==%percent%    resize==%resize%   resizeInfo==%resizeInfo%   quality=%quality%
    echo  %resize%  -q %quality%
Выводит следующее:

Code: Select all

resize= -resize 50 50 -rtype lanzos
resizeInfo=rsz=50%,
percent==50    resize==%resize%   resizeInfo==%resizeInfo%   quality=80
 %resize%  -q 80
[/color][/bgcolor]
Так как же заставить SET работать в User Menu?

PS:Win7,Far 2.0/bld1807
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

User Menu: SET не присваивает переменной значение

Post by HaRT »

textExpanser wrote: как же заставить SET работать в User Menu?
Перенести весь набор команд в CMD-файл и вызывать его.
Фар есть инструмент, а не нянька. © 2009 DrKnS
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

HaRT wrote:Перенести весь набор команд в CMD-файл и вызывать его.
Не подходит, потому что bat-файл для каждого пункта меню создавать никуда не годится. Это нужно делать встроенными средствами, для чего они и делались, иначе вообще в чем был смысл встраивания скрипта в само меню.

Хочется все же разобраться - это я что-то делаю не так, или это глюк, а если глюк, то можно ли и как его обойти встроенными возможностями Far, а не внешними.
И - почему вообще это происходит?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

User Menu: SET не присваивает переменной значение

Post by DrKnS »

textExpanser wrote: встроенными возможностями Far
Far - не командный процессор.
Используйте cmd-файл.
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

cmd-файл можно и без Far использовать. А Far безусловно именно командный процессор (в смысле менеджмента и отдачи команд).

Или Вы считаете, что это функционал нужно из меню убрать?..
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

User Menu: SET не присваивает переменной значение

Post by HaRT »

DrKnS wrote: Far - не командный процессор
Однако я вижу здравое зерно в жалобах textExpanser.
Фар одни команды из набора выполняет сам, а другие — порождённым %ComSpec%ом, притом, похоже, на каждую строчку новым. Если это так, то не разумнее ли было бы, чтобы Фар перед выполнением последовательности команд смотрел, может ли он их все выполнить сам, и если нет, выполнял бы их все порождённым интерпретатором (притом одним экземпляром) — чтобы в результате не было таких противоречий, на которые указывает топикстартер?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

User Menu: SET не присваивает переменной значение

Post by DrKnS »

HaRT wrote: чтобы Фар перед выполнением последовательности команд смотрел, может ли он их все выполнить сам, и если нет, выполнял бы их все порождённым интерпретатором
...и этим поломал все сценарии, в которых внешние команды сочетаются с чем-то сугубо far-specific, да-да:

Code: Select all

cd !??!
dir /b > out
tmp:out
del out
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

User Menu: SET не присваивает переменной значение

Post by HaRT »

DrKnS wrote: ...и этим поломал все сценарии, в которых внешние команды сочетаются с чем-то сугубо far-specific
Хм, да, об этом я как-то не подумал.
Фар есть инструмент, а не нянька. © 2009 DrKnS
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

Можно проверять наличие tmp:
А еще можно опцию добавить, т.е. запустить во внешнем временном скрипте
Или придумать и добавить какой-то способ передачи значений переменных между строками скрипта

Если бы я с этим сталкивался один-два раза, то не пошел бы писать тему. Но так как мистика происходит регулярно, то делать все новые и новые внешние скрипты для новых пунктов меню уже чересчур.
Last edited by textExpanser on Wed 01 Jun, 2016 22:36, edited 1 time in total.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

User Menu: SET не присваивает переменной значение

Post by Yegor »

А если извратиться?

Пример farmenu.ini

Code: Select all

1:  Test CMD
    echo @echo off >temp.cmd
    echo echo test >>temp.cmd
    echo set quality=!?Quality (1..100):?80! >>temp.cmd
    echo echo %quality% >>temp.cmd
    temp.cmd
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

Да, это можно попробовать, спасибо. Еще бы в Far сделать стандартный временный буфер для таких вещей, например

Code: Select all

echo %somevar%>>:clipbuf:
где Фар сам подставлял бы временный файл или что-то другое (но не загаживая системный Clipboard).
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

User Menu: SET не присваивает переменной значение

Post by HaRT »

textExpanser wrote: Еще бы в Far сделать стандартный временный буфер для таких вещей
Зачем?

Code: Select all

_:  Test
    set P=%TEMP%\FarMenu42.cmd
    echo @echo %0 %* "It can be any command" >> %P%
    %P% "There can be any parameters"		
    del %P%
Фар есть инструмент, а не нянька. © 2009 DrKnS
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

...
А еще лучше - сделать несколько буферов, типа :clipbuf0:, :clipbuf1:, ... :clipbuf9:
HaRT wrote:
textExpanser wrote: Еще бы в Far сделать стандартный временный буфер для таких вещей
Зачем?

Code: Select all

....[/quote] Например затем, что количество строк с командами в меню сильно ограничено.
Кстати, интересно, что здесь Ваша команда SET нормально отработала и значение переменной P в следующих строках отработало. Но переменные запоминаются не всегда - SET работает нестабильно (см. выше, с чего начался тред). 

Возможно, встроенный в Far интерпретатор может запоминать простейшие переменные после исполнения строки, но не может передавать для SET предыдущие переменные в строку на исполнение?
Или когда SET предваряется какой-то другой командой, типа IF ?
textExpanser
Posts: 74
Joined: Wed 11 Apr, 2007 18:23

User Menu: SET не присваивает переменной значение

Post by textExpanser »

Нашел ещё один баг встроенного интерпретатора в меню:
неправильно обрабатывается следующий формат команды SET:
SET "B=BBB"
Вместо переменной B , здесь присваивается значение переменной "B (!)

Code: Select all

set "B=BBB"
echo «B» == %B%
echo «"B» == %"B%
pause
В .bat/cmd файле отрабатывает как надо:
«B» == BBB
«"B» ==

А вот из меню нет:
«B» == %B%
«"B» == BBB"


То есть либо это неправильная интерпретация Фаром команды SET (далеко не по стандарту), либо какой-то глюк.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

User Menu: SET не присваивает переменной значение

Post by Smitis »

textExpanser wrote:далеко не по стандарту
А где можно посмотреть этот "стандарт"? То, что командный процессор может обрабатывать set "var=value" я в курсе, но это больше похоже на недокументированную фичу. И, кстати, в autoexec.bat set обрабатывается похожим с ФАРом образом.
Разум когда-нибудь победит.
Post Reply

Return to “Нужна помощь”