AskParam - диалог запроса параметров командной строки

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Здравствуйте!
MVV
Активно пользуюсь AskParam' ом и вас поминаю добрым словом.
Для полного счастья не хватает вомзожности обработки условий. Например, что-то наподобие:

Код: Выделить всё

AskParam /c"Условия" /t"Создать файл: -c" /u"Переместить файл: -m" /t"Удалить файл: -d" /p(h)"Параметр 1:" /IF"%1"="-d"OR"-m" /u"С выводом предупреждения: -w1" /t"Без вывода предупреждения: -w0" /p(h)"Параметр 2:" "some.exe" "%1" "%2"
Т.е. чтобы в зависимости от выбранного параметра 1, окно для параметра 2 или выводилось, или не выводилось. Как в этом примере окошко "Параметр 2" будет выведено только, если было выбрано "-m" или "-d".

Возможно ли что-то такое реализовать? Если да, то не могли бы сделать? :)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да уж, запросики у вас... Боюсь, это потребует конкретной переработки. Попробуй после первого выбора запускать батник, который будет запускать новую AskParam...
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Да уж, запросики у вас...
Назрела практическая необходимость. Использую пару десятков скриптов, в каждом из которых по многу параметров. Запоминать их все нереально, да и оверкил, не все регулярно используются.
Боюсь, это потребует конкретной переработки.
В «боюсь» не поверил 8) Если идея неплохая, может стоит взяться?
Попробуй после первого выбора запускать батник
Много костылей получится. При том, если учесть, что AskParam сама – вспомогательная утилита, то получается костыли для «костыля».
Для каждого скрипта тогда придётся по несколько батников ваять, потому что иногда там не одно условие попадается. Я пока так выпутываюсь: в /p"..." прописываю напоминания, типа:

Код: Выделить всё

/u"С пердупреждением: -w1" /t"Без предупреждения: -w0" /t"Пусто: " /p(h)"!! Только для -m и -d !! Параметр 2:"
И, как видите, добавляю третью фейковую строку, для пустоты.

В общем, если заинтересуетесь, будем очень рады :)
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

MVV

1 Можно ли запустить AskParam из VBS скрипта и получить результат обратно в скрипт? Как? Желательно без CMD.

2 Можно ли в /p использовать многострочный текст? Поддерживаются ли символы перевода строки (какие)?
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

1 Можно ли запустить AskParam из VBS скрипта и получить результат обратно в скрипт? Как? Желательно без CMD.
Результатом запуска AskParam всегда является выполнение какой-то команды. Из скрипта его получится получить, только если команда запишет его в файл.
Хм, а разве из скрипта нельзя отображать диалоговые окна напрямую?
2 Можно ли в /p использовать многострочный текст? Поддерживаются ли символы перевода строки (какие)?
Нет, ничего такого на данный момент нет.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

MVV писал(а):Из скрипта его получится получить, только если команда запишет его в файл.
Т.е. применение CMD для записи в файл обязательно? И без файла ни как?
MVV писал(а):а разве из скрипта нельзя отображать диалоговые окна напрямую?
Ну с выпадающим то списком в VBS окон нет... :(
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):Т.е. применение CMD для записи в файл обязательно? И без файла ни как?
Передавать напрямую можно было бы только в потоке, но AskParam - неконсольная, т.ч. без записи никак. Но вместо CMD это может быть и любая другая неконсольная программа, поддерживающая параметры, включая и скрипты, которые могут записать данные в файл.
gora писал(а):Ну с выпадающим то списком в VBS окон нет...
Вызвать некий системный диалог с выпадающим списком можно. Если речь о рисовании окон, то с доп. компонентами типа WSO вполне возможно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher писал(а):любая другая неконсольная программа, поддерживающая параметры
Можно пару примеров таких программ?
Flasher писал(а):включая и скрипты, которые могут записать данные в файл.
Можно пример применения VBS в данном конкретном случае?

Добавлено спустя 2 минуты:
Flasher писал(а):Вызвать некий системный диалог с выпадающим списком можно. Если речь о рисовании окон, то с доп. компонентами типа WSO вполне возможно.
Покажите, как?
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):Можно пару примеров таких программ?
WinRAR, 7zG.
gora писал(а):Можно пример применения VBS в данном конкретном случае?
А я случая конкретного не вижу. Вообще я поспешил насчёт только потока и записи. Одних параметров более чем достаточно.
Комбинированный вариант:

Код: Выделить всё

Dim WSH : Set WSH = CreateObject("WScript.Shell")
With CreateObject("Scripting.FileSystemObject")
  TempFile = CreateObject("Shell.Application")._
  NameSpace(WSH.ExpandEnvironmentStrings("%TEMP%")).Self.Path & "" & .GetTempName
  .OpenTextFile(TempFile, 2, True, -1).Write WScript.Arguments(0)
  MsgBox .OpenTextFile(TempFile,,,-1).ReadLine & " " & WScript.Arguments(1)
 .DeleteFile TempFile, 1
End With
Стандартный вариант:

Код: Выделить всё

MsgBox WScript.Arguments(0) & " " & WScript.Arguments(1)

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\AskParam.exe
/c"Передаём в окно vbs" /t"Шла Саша" /t"Шёл Петя" /p"Начало:" /r- /t"по шоссе." /t"по тропинке." /p"Продолжение:" "%%COMMANDER_PATH%%\Scripts\Test.vbs" "%%1" "%%2"
sud.dll,1
vbs + AskParam
%COMMANDER_PATH%\Utils\
-1
Стандартный вариант подходит для запуска скрипта из AskParam, что вообще по сути логичней. Зачем наоборот?
Если вызов непосредственно из скрипта и никак иначе, то пример следующий:

Код: Выделить всё

If WScript.Arguments.Count = 0 Then
  AskParam = """%COMMANDER_PATH%\Utils\AskParam.exe"""
  CreateObject("WScript.Shell").Exec AskParam & " /c""Передаём в окно vbs"" /t""Шла Саша"" /t""Шёл Петя"" /p""Начало:"" /r- /t""по шоссе."" /t""по тропинке."" /p""Продолжение:"" """ & WScript.ScriptFullName & """ ""%1"" ""%2"""
  WScript.Quit
Else MsgBox WScript.Arguments(0) & " " & WScript.Arguments(1)
End If
gora писал(а):Покажите, как?
Времени нет. См. ControlListView для AutiItX.
А вообще о таких вещах правильно было бы тут спрашивать.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ещё можно просто вызвать другую копию этого же скрипта с определённым ключом и передать ему соответствующие параметры, а скрипт уже хоть в файл, хоть ещё куда пусть пишет то, что ему передали. Кстати, можно ли двум копиям скрипта через какой-нибудь пайп обмениваться данными?
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher
Спасибо за разъяснения.
Я понял, что утилита не совсем то, что нужно мне, но я попробую ее таки использовать пока не найду другого решения.
Про офтоповость моих вопросов я уже догадался, но я и не собирался изначально уходить в скрипты. В общем я закругляюсь.
Последний раз редактировалось gora Чт дек 18, 2014 14:40, всего редактировалось 1 раз.
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Ещё можно просто вызвать другую копию этого же скрипта с определённым ключом
Можно и без ключа, см. выше.
MVV писал(а):Кстати, можно ли двум копиям скрипта через какой-нибудь пайп обмениваться данными?
Только через выходный поток, запуская скрипт через CScript.exe, но это не назовёшь именованным каналом, да и нет в этом необходимости.
gora писал(а):Я понял, что утилита не совсем то, что нужно мне
А что нужно?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

MVV писал(а):а скрипт уже хоть в файл, хоть ещё куда пусть пишет то, что ему передали
Столкнулся с :
1 Запись батником
- кириллица, кодировка 866
- проблемами со спецсимволами
2 Запись VBS
- пропадают кавычки

Какие еще есть варианты?
Flasher писал(а):А что нужно?
Не буду отвлекать ибо:
Flasher писал(а):Времени нет
Flasher писал(а):о таких вещах правильно было бы тут спрашивать
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

1 Запись батником
- кириллица, кодировка 866
chcp 1251?
gora писал(а):2 Запись VBS
- пропадают кавычки
AskParam к этому отношения не имеет. Параметры передаются без кавычек.
gora писал(а):Не буду отвлекать ибо:
Подумать о вариантах время всегда найдётся.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher писал(а):chcp 1251?
Конечно, я же параметр буду обрабатывать в VBS скрипте, значит и кодировка нужна 1251
Flasher писал(а):AskParam к этому отношения не имеет.
Это как посмотреть... Непосредственный виновник конечно не AskParam, но ведь мне здесь предлагают любой скрипт для получения (передачи) параметра в файл, а VBS для этого и не подходит. Так что получается и нет таких уж простых способов получить параметр, введенный в AskParam.

MVV

Можно ли попросить Вас добавить ключ, который не будет заставлять утилиту "выполнять команду", а вместо этого запишет введенное в утилите значение в файл? Кодировка файла 1251. Путь к файлу прописывается в этом новом ключе.

Если это невозможно, то наплюйте, выкручусь...
Win7 SP1 Ultimate x64, TC8.52a x64
Ответить