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

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

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

Post by Smitis »

Latest post of the previous page:

Переменная PATHEXT - системная. Пустые расширения в ней (из одной точки) не работают. Нужен свой параметр в настройках для "выполнителя" со списком расширений (или даже масок). По умолчанию значение параметра инициализировать переменной 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: Wed 20 Sep, 2017 17:48Нужен свой параметр в настройках для "выполнителя" со списком расширений (или даже масок).
Вполне возможно, что не помешает и свой, но мне кажется что выше разговор о другом.

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

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

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

От чего зависит интересно.
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 »

А можно узнать, ради чего всё это?
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 »

Что именно?
Если про файлы без расширения, то тут соображения абстрактного совершенства: заметил неконсистентность и сообщаю.
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:34Для файлов без расширения ассоциации не работают?
У меня описанный пример работает.
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 »

От ОС может зависеть?
У меня на XP и на 8.1 не работает.
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 »

Маловероятно.
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 »

Заметил такое отличие между запуском ассоциации на файле и из командной строки.
Задаю ассоциацию (любую, но для примера пусть остаётся маска 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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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

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

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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

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

Post by gene.pavlovsky »

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

У меня была проблемка с моим 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), для которого \ в данном случае ничего не меняет, и команда работает.

Так что всем спасибо )
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

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

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
Post Reply

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