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

Хотите говорить о Far и не знаете, куда обратиться?
Smitis
Posts: 1490
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

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

Post by Smitis » Wed 20 Sep, 2017 17:48

Latest post of the previous page:

Переменная PATHEXT - системная. Пустые расширения в ней (из одной точки) не работают. Нужен свой параметр в настройках для "выполнителя" со списком расширений (или даже масок). По умолчанию значение параметра инициализировать переменной PATHEXT.
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 20 Sep, 2017 17:57

Smitis wrote:
Wed 20 Sep, 2017 17:48
Нужен свой параметр в настройках для "выполнителя" со списком расширений (или даже масок).
Вполне возможно, что не помешает и свой, но мне кажется что выше разговор о другом.

Сейчас исполняемы просто ВСЕ маски из списка ассоциаций на Enter, и как-то ограничивать это смысла я сходу не вижу.
А другой вопрос, какие расширения подставлять, если в командной строке файл без расширения.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 20 Sep, 2017 18:04

John Doe wrote:
Wed 20 Sep, 2017 15:40
Обдумал ещё раз.
PATHEXT влияет на то, какие расширения будут подставляться, если имя в командной строке без расширения.
И всё, по идее. Если же имя указано полностью, то файл будет искаться в путях безотносительно того, перечислено ли его расширение в PATHEXT.

Но если файл и есть без расширения, т.е. имя указано полностью, и для него существует ассоциация, то вполне логично было бы в этом случае запускать.
Хотя вот мне прислали скрин, подтверждающий, что и файлы без расширения могут запускаються..

От чего зависит интересно.

User avatar
DrKnS
Posts: 4643
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Wed 20 Sep, 2017 20:27

А можно узнать, ради чего всё это?

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 20 Sep, 2017 20:34

Что именно?
Если про файлы без расширения, то тут соображения абстрактного совершенства: заметил неконсистентность и сообщаю.

User avatar
DrKnS
Posts: 4643
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Wed 20 Sep, 2017 21:10

John Doe wrote:
Wed 20 Sep, 2017 14:34
Для файлов без расширения ассоциации не работают?
У меня описанный пример работает.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 20 Sep, 2017 21:23

От ОС может зависеть?
У меня на XP и на 8.1 не работает.

User avatar
DrKnS
Posts: 4643
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Wed 20 Sep, 2017 21:44

Маловероятно.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 21 Sep, 2017 07:08

Заметил такое отличие между запуском ассоциации на файле и из командной строки.
Задаю ассоциацию (любую, но для примера пусть остаётся маска xyz) с командой echo file:"!.!":
  • На файле - всё работает ожидаемо

    Code: Select all

    C:\>echo file:"xyz"
    file:"xyz"
  • Из командной строки:

    Code: Select all

    C:\>xyz
    C:\>echo file:"C:\xyz"
    file:"C:\xyz"
    
    Т.е. при запуске в командной строке метасимволы раскрылись почему-то неправильно
Update:
http://bugs.farmanager.com/view.php?id=3500
Last edited by John Doe on Fri 22 Sep, 2017 09:13, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 21 Sep, 2017 07:47

И ещё есть отличия в использовании @ для предотвращения гашения панелей.
Если символ задан в самой ассоциации, то всё работает.

Но если в ассоциации символа нет, а он добавляется в командной строке, то экран гасится как ни в чём не бывало.
То же и в "Применить команду".

Update:
http://bugs.farmanager.com/view.php?id=3501
Last edited by John Doe on Fri 22 Sep, 2017 16:24, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 21 Sep, 2017 08:28

DrKnS wrote:
Wed 20 Sep, 2017 21:10
John Doe wrote:
Wed 20 Sep, 2017 14:34
Для файлов без расширения ассоциации не работают?
У меня описанный пример работает.
Нашёл настройку, которая влияет: System.UseRegisteredTypes:
Использовать стандартные типы файлов
Если это опция включена, то при нажатии Enter на файле, тип которого известен Windows и отсутствует в ассоциациях файлов Far, будет запущена программа Windows, предназначенная для обработки этого типа файлов.
Когда она выключена, то файл без расширения не запускается по ассоциации из командной строки.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 21 Sep, 2017 09:42

Ребята, ваша дискуссия мне весьма помогла.

У меня была проблемка с моим Cygwin и Bash в кач-ве ComSpec:
Пишу, допустим, "python script.py", запускаю, Фар пытается выполнить команду напрямую, без ComSpec-а, при этом он находит Cygwin-ский symlink: python => python2.7.exe, но не знает, что с ним делать, вылезает сообщение об ошибке. Можно было все проблемные команды добавлять в System.Executor.ExcludeCmds, либо, как делал я, "python=python2.7.exe" в doskey.ini (который загружается при старте Фара). Но это надо было делать в каждом случае, когда возникает очередная такая проблема.

Теперь же я решил это так. Создал файловую ассоциацию:

File mask: *.
Description: Files without extension
Execute command: \!


Теперь "python script.py" превращается в "\python script.py", Far-у этот \ не нравится, и он отправляет команду ComSpec-у (bashcmd), для которого \ в данном случае ничего не меняет, и команда работает.

Так что всем спасибо )

Smitis
Posts: 1490
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

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

Post by Smitis » Thu 21 Sep, 2017 09:50

gene.pavlovsky,
Я когда-то для подобных целей просто сделал в cygwin копии всех скриптов без расширений с расширением sh (igawk -> igawk.sh и пр.)
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 21 Sep, 2017 10:05

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: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 21 Sep, 2017 10:26

Да, это я понял. И поначалу довольно вяло следил за дискуссией, ибо лично я пока довольствуюсь assoc/ftype для этих целей. Но в итоге и для себя нашёл что-то полезное )

User avatar
HaRT
Moderator
Posts: 8110
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 103 times

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

Post by HaRT » Thu 21 Sep, 2017 13:10

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: 11400
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 21 Sep, 2017 14:14

Вообще-то я о принципе. На примере *.py, но в фаре у каждого свои ассоциации.
Плюс, системными ассоциациями проблематично например сделать запуск фаровских плагинов, по префиксу.

Post Reply

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