1

Тема: AHK: Передача параметров скрипту, вызванному из Total Commander

В Total Commander есть собственные параметры для панели инструментов, пользовательских меню и команд.
Эти параметры можно передавать программам и скриптам.
Создаю кнопку или встроенную команду
%commander_path%\AutoHotkey\AutoHotkey.exe "%commander_path%\Scripts\Script.ahk"
В качестве параметра указываю %P - путь к текущему каталогу.

Script.ahk

#NoEnv
#NoTrayIcon
Path = %1%
Msgbox, % Path
ExitApp

При наличии пробелов в пути скрипт в качестве параметра принимает только часть пути до пробела. Если заключить параметр в кавычки "%P" - то кавычки (иногда только с одной стороны) переходят и в параметр.

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

2

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Вам, наверное, на форум Total Commander'а надо обратиться. Если посылать параметр обычным способом

MyScript := "D:\AHK\Scripts\_Разработка\NewFile3.ahk"
Run, %MyScript% "test test"

всё считывается нормально даже с пробелами.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Aslan, 2015-05-01 22:05:55)

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Наверное, правильный ответ - параметр должен иметь вид "%P\".

teadrinker пишет:

Вам, наверное, на форум Total Commander'а надо обратиться.

И туда обращусь. Но наверняка и тут обитают пользователи этого файлового менеджера.
Всё-таки это ведь нюанс работы именно AutoHotkey.
Например, VBS-скрипту зачастую достаточно передать параметр %P. А вот с AutoHotkey такой простой способ не работает. Видимо, нужно каким-то образом экранировать символы или обрабатывать пути.

4

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Aslan пишет:

Наверное, правильный ответ - параметр должен иметь вид "%P\".

Сам себе отвечу. Нет, это неправильный ответ.
В результатах поиска и в архивах при таком параметре остаются "лишние" кавычки.

Так что вопрос актуален.

5 (изменено: Flasher, 2015-05-02 10:33:16)

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Aslan пишет:

При наличии пробелов в пути скрипт в качестве параметра принимает только часть пути до пробела.

В этом нет ничего удивительного, т.к. параметры, не заключённые в кавычки, всегда разделяются пробелами.

Aslan пишет:

Но наверняка и тут обитают пользователи этого файлового менеджера.

Если и есть, то таких можно и не дождаться. Их тут - ты да я, да мы с тобой.

Если серьезно, то вопрос вообще не должен рассматриваться с точки зрения передачи параметров именно из ТС.
Всё дело в наличии на конце параметра символа "\". Он пропадает, если находится в одиночестве, и вместо него в начале параметра появляется кавычка. В корнях архивов или результатах поиска "\" не возвращается, т.к. источником является файл, а не папка, поэтому добавление его после %P создаст описанную проблему в отличии от ситуации, когда источником является папка и бэкслеш указывается сдвоенным, но возвращается одиночным.

Можно констатировать, что это баг AHK, который требует починки.

6

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Например, VBS-скрипту зачастую достаточно передать параметр %P.

От этого и будем исходить, только возьмём не VBS, а JS:

; var WshShell = new ActiveXObject("WScript.Shell")
; WshShell.Run('"'+WshShell.ExpandEnvironmentStrings('%Commander_Path%')+'\\AutoHotkey\\AutoHotkey.exe\" "'+WScript.ScriptFullName+'" "'+WScript.Arguments.Item(0))
; @if (false)

#NoEnv
#NoTrayIcon
Path = %1%
Msgbox, % Path
ExitApp

; @end

7

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Aslan пишет:

Total Commander автоматически добавляет кавычки вокруг параметра.

Это утверждение не имеет ничего общего с действительностью.

8 (изменено: Aslan, 2015-05-01 22:15:52)

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

wisgest пишет:

От этого и будем исходить, только возьмём не VBS, а JS

Честно говоря, не понял механизм работы предложенного варианта - строки ведь закомментированы, и результат получает такой же, как и без них.

А вообще - напоминает фразу "вырвать гланды через попу".)))
AutoHotkey действительно не может сам обработать параметр?

+ открыть спойлер
Flasher пишет:

Это утверждение не имеет ничего общего с действительностью.

ОК, зачёркивания на форуме нет, удалил это утверждение.

9 (изменено: Aslan, 2015-05-01 23:38:04)

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Хех, кавычки ведь в именах файлов/каталогов в Windows всё-равно запрещены, потому достаточно их убрать

#NoEnv
#NoTrayIcon
Path = %1%
StringReplace, Path, Path, ", \, All
Msgbox, % Path
ExitApp

и использовать параметр "%P\"  (или для универсальности с учётом архивов добавить куда-нибудь %Z - например, %Z"%P\"   ).
Может, есть и более элегантное решение передачи параметров, не знаю...

10

Re: AHK: Передача параметров скрипту, вызванному из Total Commander

Aslan
Если внимательно прочесть то, что я написал, то станет очевидно, что , \, All не потребуется.