Ассоциации для файлов при запуске из командной строки

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

Latest post of the previous page:

gene.pavlovsky wrote: Thu 21 Sep, 2017 09:42Теперь "python script.py" превращается в "\python script.py"
Это хорошо, что помогло)
Но хочу подчеркнуть, в данном топике мы боремся за то, чтобы с помощью ассоциаций сделать так, чтобы "script.py" запускался без предшествующего ему "python":

Code: Select all

script.py
А при добавлении ".py" к PATHEXT даже без расширения:

Code: Select all

script
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by gene.pavlovsky »

Да, это я понял. И поначалу довольно вяло следил за дискуссией, ибо лично я пока довольствуюсь assoc/ftype для этих целей. Но в итоге и для себя нашёл что-то полезное )
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Ассоциации для файлов при запуске из командной строки

Post by HaRT »

John Doe wrote: Thu 21 Sep, 2017 10:05с помощью ассоциаций сделать так, чтобы "script.py" запускался без предшествующего ему "python"
Это отлично делается системными ассоциациями:

Code: Select all

F:\>type HelloWorld.py
print 'Hello, World!'

F:\>set PATHEXT
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PL;.PY;.PHP;.PYW;.RB;.RBW

F:\>assoc .py
.py=Python_script

F:\>ftype Python_script
Python_script=G:\Programs\Python27\python.exe "%1" %*

F:\>HelloWorld
Hello, World!
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

Вообще-то я о принципе. На примере *.py, но в фаре у каждого свои ассоциации.
Плюс, системными ассоциациями проблематично например сделать запуск фаровских плагинов, по префиксу.
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by gene.pavlovsky »

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

Ассоциации для файлов при запуске из командной строки

Post by DrKnS »

John Doe wrote: Wed 20 Sep, 2017 14:51Жмём Enter на файле, получаем макрообласть "Shell".
Запускаем то же самое из командной строки - получаем "Other".
Other - это десктоп, на фоне которого отображается сообщение.
John Doe wrote: Wed 20 Sep, 2017 14:51по макрообласти Other я пытаюсь определить, установлен ли в данный момент режим UserScreen, соответственно надо ли вызвать Get/SetUserScreen
Почему бы не вызывать всегда?
John Doe wrote: Thu 21 Sep, 2017 08:28Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

DrKnS wrote: Thu 21 Sep, 2017 21:50Other - это десктоп, на фоне которого отображается сообщение.
Бесспорно, тут всё логично.
Выходит что в этой ситуации я никак не могу выяснить, активен ли в данный момент UserScreen или нет (т.е. вызывался ли перед этим GetUserScreen).
В некоторых случаях достаточно использовать какой-то свой флаг, но этого точно недостаточно, если UserScreen использовать как универсальный способ отображения десктопа в любой момент (например в редакторе)
Как вариант, для определения текущего режима можно было бы задействовать неиспользуемый сейчас в FCTL_GETUSERSCREEN Param2.
DrKnS wrote: Thu 21 Sep, 2017 21:50Почему бы не вызывать всегда?
Потому что запускаемый скрипт может использовать диалоговые функции, а значит после FCTL_SETUSERSCREEN в буфере останется мусор.

А вообще для моих целей крайне желательно при запуске вообще не переключаться в Desktop, а оставлять панели.
(При запуске обычных команд этого мы добиваемся добавляя в начало символ @)
Добавлено
Мне кажется то что сейчас при запуске префикса гасятся панели, и в фоне отображается Desktop это вообще напрасное действие, потому что "нарисовать" что-то на этом десктопе всё равно не получится, не вызвав предварительно GetUserScreen.
http://bugs.farmanager.com/view.php?id=3501
Last edited by John Doe on Fri 22 Sep, 2017 07:58, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

DrKnS wrote: Thu 21 Sep, 2017 21:50
John Doe wrote: Thu 21 Sep, 2017 08:28Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.
Возможно это было как раз для описанного выше случая:
gene.pavlovsky wrote: Thu 21 Sep, 2017 09:42Пишу, допустим, "python script.py", запускаю, Фар пытается выполнить команду напрямую, без ComSpec-а, при этом он находит Cygwin-ский symlink: python => python2.7.exe, но не знает, что с ним делать, вылезает сообщение об ошибке.
Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Ассоциации для файлов при запуске из командной строки

Post by Smitis »

John Doe wrote: Fri 22 Sep, 2017 07:48Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).
А в PATHEXT расширение добавили?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

Smitis wrote: Fri 22 Sep, 2017 09:46А в PATHEXT расширение добавили?
Выше говорилось, что файлы без расширения нельзя добавить. Похоже что можно:
set pathext

Code: Select all

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.
После этого при запуске предлагает программу для открытия.
Но флажок "Использовать её для всех файлов такого типа" недоступен, серый. Т.е. толку мало..

В любом случае, PATHEXT тут врядли применим, ведь я пытался запустить файл из текущей папки.

Ассоциацию я пробовал и вручную задать:
assoc .

Code: Select all

.=noext
ftype noext

Code: Select all

noext=echo %1
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Ассоциации для файлов при запуске из командной строки

Post by HaRT »

John Doe, насколько я понимаю, в системной ассоциации надо указать именно исполняемый файл (например, %COMSPEC%). echo таковым не является. Впрочем, для файлов без расширения у меня и это не завелось (но не очень-то и хотелось).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

А вот кстати вы правильно указали на мою ошибку.

Code: Select all

ftype noext=cmd /c echo %1
После этого у меня файлы без расширения заработали как исполняемые.

PATHEXT тоже правил.

P. S.
Проблема только в том, что фар это в новом окне открывает.
Last edited by John Doe on Fri 22 Sep, 2017 12:50, edited 1 time in total.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Ассоциации для файлов при запуске из командной строки

Post by Smitis »

John Doe,
Я могу кое в чём ошибится, но механизм использования PATHEXT следующий:
- Исполняемыми файлами в cmd считаются файлы с расширение из pathext.
- Если файл указан без расширения, поочерёдно подставляются расширения из pathext и ищется соответствующий файл по стандартному алгоритму.
- Если файл найден, для него выполняется команда из глагола open в соответствующих разделах реестра (HKCU\Software\Classes или HKCR). Возможно, вместо open используется глагол по умолчанию, заданный в разделе выше (в shell, надо бы проверить).
Но пустое расширение не предусмотрено в реестре! Хотя в pathext такое расширение, похоже, обрабатывается.
Впрочем, попробуйте задать в реестре в HKCR расширение из одной точки, может сработает, как в pathext.
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Ассоциации для файлов при запуске из командной строки

Post by Smitis »

Попробовал - так работает.
- Добавил пустое расширение в PATHEXT.
- Добавил ветку HKEY_CLASSES_ROOT\.\shell\open\command со значением C:\Windows\System32\cscript.exe //nologo //e:javascript "%1"
Скрипт на JS без расширения из CMD выполнился.
А вот из ФАРа, да, открывается в отдельном окне.
Last edited by Smitis on Fri 22 Sep, 2017 13:13, edited 3 times in total.
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Ассоциации для файлов при запуске из командной строки

Post by DrKnS »

Smitis wrote: Fri 22 Sep, 2017 13:05из ФАРа, да, открывается в отдельном окне.
А это даже баг.
5038.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Ассоциации для файлов при запуске из командной строки

Post by John Doe »

5041, продолжает открываться в отдельном
Post Reply

Return to “Обсуждение Far Manager”