Страница 7 из 20
Добавлено: Ср дек 10, 2014 15:47
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".
Возможно ли что-то такое реализовать? Если да, то не могли бы сделать?

Добавлено: Ср дек 10, 2014 19:30
MVV
Да уж, запросики у вас... Боюсь, это потребует конкретной переработки. Попробуй после первого выбора запускать батник, который будет запускать новую AskParam...
Добавлено: Ср дек 10, 2014 20:46
yozhik
Да уж, запросики у вас...
Назрела практическая необходимость. Использую пару десятков скриптов, в каждом из которых по многу параметров. Запоминать их все нереально, да и оверкил, не все регулярно используются.
Боюсь, это потребует конкретной переработки.
В «боюсь» не поверил

Если идея неплохая, может стоит взяться?
Попробуй после первого выбора запускать батник
Много костылей получится. При том, если учесть, что AskParam сама – вспомогательная утилита, то получается костыли для «костыля».
Для каждого скрипта тогда придётся по несколько батников ваять, потому что иногда там не одно условие попадается. Я пока так выпутываюсь: в /p"..." прописываю напоминания, типа:
Код: Выделить всё
/u"С пердупреждением: -w1" /t"Без предупреждения: -w0" /t"Пусто: " /p(h)"!! Только для -m и -d !! Параметр 2:"
И, как видите, добавляю третью фейковую строку, для пустоты.
В общем, если заинтересуетесь, будем очень рады

Добавлено: Чт дек 18, 2014 09:43
gora
MVV
1 Можно ли запустить AskParam из VBS скрипта и получить результат обратно в скрипт? Как? Желательно без CMD.
2 Можно ли в /p использовать многострочный текст? Поддерживаются ли символы перевода строки (какие)?
Добавлено: Чт дек 18, 2014 10:29
MVV
1 Можно ли запустить AskParam из VBS скрипта и получить результат обратно в скрипт? Как? Желательно без CMD.
Результатом запуска AskParam всегда является выполнение какой-то команды. Из скрипта его получится получить, только если команда запишет его в файл.
Хм, а разве из скрипта нельзя отображать диалоговые окна напрямую?
2 Можно ли в /p использовать многострочный текст? Поддерживаются ли символы перевода строки (какие)?
Нет, ничего такого на данный момент нет.
Добавлено: Чт дек 18, 2014 10:36
gora
MVV писал(а):Из скрипта его получится получить, только если команда запишет его в файл.
Т.е. применение CMD для записи в файл обязательно? И без файла ни как?
MVV писал(а):а разве из скрипта нельзя отображать диалоговые окна напрямую?
Ну с выпадающим то списком в VBS окон нет...

Добавлено: Чт дек 18, 2014 10:59
Flasher
gora писал(а):Т.е. применение CMD для записи в файл обязательно? И без файла ни как?
Передавать напрямую можно было бы только в потоке, но AskParam - неконсольная, т.ч. без записи никак. Но вместо CMD это может быть и любая другая неконсольная программа, поддерживающая параметры, включая и скрипты, которые могут записать данные в файл.
gora писал(а):Ну с выпадающим то списком в VBS окон нет...
Вызвать некий системный диалог с выпадающим списком можно. Если речь о рисовании окон, то с доп. компонентами типа WSO вполне возможно.
Добавлено: Чт дек 18, 2014 11:08
gora
Flasher писал(а):любая другая неконсольная программа, поддерживающая параметры
Можно пару примеров таких программ?
Flasher писал(а):включая и скрипты, которые могут записать данные в файл.
Можно пример применения VBS в данном конкретном случае?
Добавлено спустя 2 минуты:
Flasher писал(а):Вызвать некий системный диалог с выпадающим списком можно. Если речь о рисовании окон, то с доп. компонентами типа WSO вполне возможно.
Покажите, как?
Добавлено: Чт дек 18, 2014 12:26
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.
А вообще о таких вещах правильно было бы
тут спрашивать.
Добавлено: Чт дек 18, 2014 13:49
MVV
Ещё можно просто вызвать другую копию этого же скрипта с определённым ключом и передать ему соответствующие параметры, а скрипт уже хоть в файл, хоть ещё куда пусть пишет то, что ему передали. Кстати, можно ли двум копиям скрипта через какой-нибудь пайп обмениваться данными?
Добавлено: Чт дек 18, 2014 14:13
gora
Flasher
Спасибо за разъяснения.
Я понял, что утилита не совсем то, что нужно мне, но я попробую ее таки использовать пока не найду другого решения.
Про офтоповость моих вопросов я уже догадался, но я и не собирался изначально уходить в скрипты. В общем я закругляюсь.
Добавлено: Чт дек 18, 2014 14:23
Flasher
MVV писал(а):Ещё можно просто вызвать другую копию этого же скрипта с определённым ключом
Можно и без ключа, см. выше.
MVV писал(а):Кстати, можно ли двум копиям скрипта через какой-нибудь пайп обмениваться данными?
Только через выходный поток, запуская скрипт через CScript.exe, но это не назовёшь именованным каналом, да и нет в этом необходимости.
gora писал(а):Я понял, что утилита не совсем то, что нужно мне
А что нужно?
Добавлено: Чт дек 18, 2014 15:44
gora
MVV писал(а):а скрипт уже хоть в файл, хоть ещё куда пусть пишет то, что ему передали
Столкнулся с :
1 Запись батником
- кириллица, кодировка 866
- проблемами со спецсимволами
2 Запись VBS
- пропадают кавычки
Какие еще есть варианты?
Flasher писал(а):А что нужно?
Не буду отвлекать ибо:
Flasher писал(а):Времени нет
Flasher писал(а):о таких вещах правильно было бы тут спрашивать
Добавлено: Пт дек 19, 2014 11:18
Flasher
1 Запись батником
- кириллица, кодировка 866
chcp 1251?
gora писал(а):2 Запись VBS
- пропадают кавычки
AskParam к этому отношения не имеет. Параметры передаются без кавычек.
gora писал(а):Не буду отвлекать ибо:
Подумать о вариантах время всегда найдётся.
Добавлено: Пт дек 19, 2014 12:12
gora
Flasher писал(а):chcp 1251?
Конечно, я же параметр буду обрабатывать в VBS скрипте, значит и кодировка нужна 1251
Flasher писал(а):AskParam к этому отношения не имеет.
Это как посмотреть... Непосредственный виновник конечно не AskParam, но ведь мне здесь предлагают любой скрипт для получения (передачи) параметра в файл, а VBS для этого и не подходит. Так что получается и нет таких уж простых способов получить параметр, введенный в AskParam.
MVV
Можно ли попросить Вас добавить ключ, который не будет заставлять утилиту "выполнять команду", а вместо этого запишет введенное в утилите значение в файл? Кодировка файла 1251. Путь к файлу прописывается в этом новом ключе.
Если это невозможно, то наплюйте, выкручусь...