Как в макросах скормить строке BackSlash?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Locked
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Как в макросах скормить строке BackSlash?

Post by Тигрёнок »

Если так:

Code: Select all

"Sequence"="%1=\"C:\\Windows\"; Print(%1)"
то Far2 (build 1576) говорит, что Bad Control Char.

Если так:

Code: Select all

"Sequence"="%1=\"C:\Windows\"; Print(%1)"
то просто не работает (да, вроде бы, и не должно).

А если так:

Code: Select all

"Sequence"="%1=\"C:\"+Chr(92)+\"Windows\"; Print(%1)"
то так, конечно, можно, но это - шиза.
Съешь мыша – стань настоящим клавишником!
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Как в макросах скормить строке BackSlash?

Post by DrKnS »

"Sequence"="%1=\"C:\\\\Windows\"; Print(%1)"
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Как в макросах скормить строке BackSlash?

Post by Centaur »

Судя по "Sequence"=, это кусок reg-файла. Значит, действуют правила эскейпинга для reg-файлов: кавычки и бэкслэши предваряются бэкслэшами.

Далее, значение из реестра является макропоследовательностью FAR’а, первый пункт которой — присвоение строковой переменной. В правой части присвоения — строковый литерал макроязыка FAR’а. Значит, действуют правила эскейпинга для строковых литералов FAR’а: в частности, кавычки и бэкслэши предваряются бэкслэшами.

Следовательно, чтобы получить один бэкслэш в строковом литерале, его нужно удвоить; а чтобы получить два бэкслэша в значении в reg-файле, каждый из них нужно снова удвоить.

C:\Windows
%1="C:\\Windows"; Print(%1)
"Sequence"="%1=\"C:\\\\Windows\"; Print(%1)"
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Re: Как в макросах скормить строке BackSlash?

Post by Тигрёнок »

Спасибо!
Съешь мыша – стань настоящим клавишником!
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Как экранировать в макросе кавычку и бэкслеш?

Post by sToLp »

Здесь я поместил скомпонованный мною для своих нужд fml-макрос:

и затем получил на него справедливое замечание:
Skirda wrote:а зачем явно напрашиваемые строки сделаны как отдельные символы?
например: Esc r e g Space i m p o r t Space " % f a r ....
и дельный совет:
Skirda wrote:у тебя наверное проблема была с двойной кавычкой и слешем - их нужно экранировать или использовать символ '@' перед строкой.


В р а з р я д к у же всё принимается нормально и в комстроке, и из макроса.

Подскажите, пожалуйста, что я упускаю?
Last edited by sToLp on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Заголовок темы. Было: Как поместить консольную команду в макрос?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Как поместить консольную команду в макрос?

Post by Max Rusov »

вместо:

Code: Select all

BackSlash F A R 2 BackSlash K e y M a c r o s BackSlash
Пиши так:

Code: Select all

print(@"\FAR2\KeyMacros\")
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Как поместить консольную команду в макрос?

Post by AlexII »

Вот две строки для макроса:
1) в «старом» формате (экранирование):

Code: Select all

print("reg import \"%farhome%\\reg2fml\\tester\\tester.reg\" > nul")
2) в «новом» формате (префикс и удваивание внутренних кавычек):

Code: Select all

print(@"reg import ""%farhome%\reg2fml\tester\tester.reg"" > nul")
P.S. В FML не проверялось.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Re: Как экранировать в макросе кавычку и бэкслеш?

Post by sToLp »

Благодарю за помощь! Макрос обновил.
AlexII wrote:В FML не проверялось.
Мой опыт показывает что всё то, что проходит в комстроке по macro:post, fml-макросом принимается. И вообще fml-форму макросов использовать гораздо удобнее, проще и быстрее. Большое спасибо автору плагина MicroLib!

upd 04.02.2010
Нечаянную опечатку в наименовании плагина MacroLib прошу считать его рекламой.
Locked

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