AskParam - диалог запроса параметров командной строки
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
2MVV
Сделал такую кнопку:[cut]TOTALCMD#BAR#DATA
%COMMANDER_PATH%\AskParam\AskParam64.exe
/c"Go to Environment Variable Path" /t"ALLUSERSPROFILE: %%ALLUSERSPROFILE%%" /t"APPDATA: %%APPDATA%%" /t"$COMMON_APPDATA: %%$COMMON_APPDATA%%" /t"$COMMON_DESKTOPDIRECTORY: %%$COMMON_DESKTOPDIRECTORY%%" /t"$COMMON_DOCUMENTS: %%$COMMON_DOCUMENTS%%" /t"$COMMON_PICTURES: %%$COMMON_PICTURES%%" /t"$COMMON_STARTMENU: %%$COMMON_STARTMENU%%" /t"$COMMON_STARTUP: %%$COMMON_STARTUP%%" /t"$COMMON_PROGRAMS: %%$COMMON_PROGRAMS%%" /t"CommonProgramFiles: %%COMMONPROGRAMFILES%%" /t"CommonProgramFiles(x86): %%COMMONPROGRAMFILES(x86)%%" /t"CommonProgramW6432: %%CommonProgramW6432%%" /t"$DESKTOP: %%$DESKTOP%%" /t"$FONTS: %%$FONTS%%" /t"LOCALAPPDATA: %%LOCALAPPDATA%%" /t"$MYPICTURES: %%$MYPICTURES%%" /t"$MYMUSIC: %%$MYMUSIC%%" /t"$MYVIDEO: %%$MYVIDEO%%" /t"$PERSONAL: %%$PERSONAL%%" /t"ProgramData: %%PROGRAMDATA%%" /t"ProgramFiles: %%PROGRAMFILES%%" /t"ProgramFiles(x86): %%PROGRAMFILES(x86)%%" /t"$PROGRAMS: %%$PROGRAMS%%" /t"ProgramW6432: %%PROGRAMW6432%%" /t"PSModulePath: %%PSMODULEPATH%%" /t"PUBLIC: %%PUBLIC%%" /t"$STARTMENU: %%$STARTMENU%%" /t"$STARTUP: %%$STARTUP%%" /t"SystemDrive: %%SYSTEMDRIVE%%" /t"SystemRoot: %%SYSTEMROOT%%" /t"TEMP: %%TEMP%%" /t"TMP: %%TMP%%" /t"USERPROFILE: %%USERPROFILE%%" /t"WINDIR: %%WINDIR%%" /p(h)"Environment Variable Name: Path" %%COMMANDER_EXE%% /o /L="%%1" /s
%WINDIR%\system32\shell32.dll,66
Go to Environment Variable Path
-1[/cut]Вроде бы работает, но есть вопросы "косметического" свойства.
1. Нельзя ли сделать, чтобы имя псевдопеременной (до двоеточия) было обрамлено %? А то сейчас первая строчка выглядит каквместо2. Почему некоторые переменные не разворачиваются в путь (при этом переход работает нормально)? Например,вместо3. Изменение первого ключа /t на /u не меняет ничего. Разумно было бы, чтобы никакого умолчательного значения не предлагалось. Поэтому мне как раз нужно /t, а диалог ведет себя так, как если бы было /u. Нужно, чтобы нажатие ОК не вызывало бы никакого действия и чтобы юзверь обязательно открыл список и выбрал один пункт. Как этого добиться?
Сделал такую кнопку:[cut]TOTALCMD#BAR#DATA
%COMMANDER_PATH%\AskParam\AskParam64.exe
/c"Go to Environment Variable Path" /t"ALLUSERSPROFILE: %%ALLUSERSPROFILE%%" /t"APPDATA: %%APPDATA%%" /t"$COMMON_APPDATA: %%$COMMON_APPDATA%%" /t"$COMMON_DESKTOPDIRECTORY: %%$COMMON_DESKTOPDIRECTORY%%" /t"$COMMON_DOCUMENTS: %%$COMMON_DOCUMENTS%%" /t"$COMMON_PICTURES: %%$COMMON_PICTURES%%" /t"$COMMON_STARTMENU: %%$COMMON_STARTMENU%%" /t"$COMMON_STARTUP: %%$COMMON_STARTUP%%" /t"$COMMON_PROGRAMS: %%$COMMON_PROGRAMS%%" /t"CommonProgramFiles: %%COMMONPROGRAMFILES%%" /t"CommonProgramFiles(x86): %%COMMONPROGRAMFILES(x86)%%" /t"CommonProgramW6432: %%CommonProgramW6432%%" /t"$DESKTOP: %%$DESKTOP%%" /t"$FONTS: %%$FONTS%%" /t"LOCALAPPDATA: %%LOCALAPPDATA%%" /t"$MYPICTURES: %%$MYPICTURES%%" /t"$MYMUSIC: %%$MYMUSIC%%" /t"$MYVIDEO: %%$MYVIDEO%%" /t"$PERSONAL: %%$PERSONAL%%" /t"ProgramData: %%PROGRAMDATA%%" /t"ProgramFiles: %%PROGRAMFILES%%" /t"ProgramFiles(x86): %%PROGRAMFILES(x86)%%" /t"$PROGRAMS: %%$PROGRAMS%%" /t"ProgramW6432: %%PROGRAMW6432%%" /t"PSModulePath: %%PSMODULEPATH%%" /t"PUBLIC: %%PUBLIC%%" /t"$STARTMENU: %%$STARTMENU%%" /t"$STARTUP: %%$STARTUP%%" /t"SystemDrive: %%SYSTEMDRIVE%%" /t"SystemRoot: %%SYSTEMROOT%%" /t"TEMP: %%TEMP%%" /t"TMP: %%TMP%%" /t"USERPROFILE: %%USERPROFILE%%" /t"WINDIR: %%WINDIR%%" /p(h)"Environment Variable Name: Path" %%COMMANDER_EXE%% /o /L="%%1" /s
%WINDIR%\system32\shell32.dll,66
Go to Environment Variable Path
-1[/cut]Вроде бы работает, но есть вопросы "косметического" свойства.
1. Нельзя ли сделать, чтобы имя псевдопеременной (до двоеточия) было обрамлено %? А то сейчас первая строчка выглядит как
Код: Выделить всё
ALLUSERSPROFILE: C:\ProgramDataКод: Выделить всё
%ALLUSERSPROFILE%: C:\ProgramDataКод: Выделить всё
$COMMON_DESKTOPDIRECTORY: %$COMMON_DESKTOPDIRECTORY%Код: Выделить всё
$COMMON_DESKTOPDIRECTORY: c:\Users\Public\DesktopСайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Можно отключить парсинг переменных с помощью ключа /e-. Но получишь другую крайность (до и после двоеточия будут имена переменных). Или найди себе юникодный символ, похожий на знак %, чтобы обмануть расширятель в нужном месте. Есть забавная альтернатива: ℅.1. Нельзя ли сделать, чтобы имя псевдопеременной (до двоеточия) было обрамлено %?
Тут всё просто: это внутренние псевдо-переменные тотала, система о них ничего не знает.2. Почему некоторые переменные не разворачиваются в путь (при этом переход работает нормально)? Например,
По умолчанию выбранным является первый элемент, а /u лишь позволяет явно задать, какой элемент нужно выбрать. А добиться пустого значения легко: сделай текущей пустую строку с помощью /u"".3. Изменение первого ключа /t на /u не меняет ничего. Разумно было бы, чтобы никакого умолчательного значения не предлагалось.
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Этот символ заменяется на ?. Win7Eng64найди себе юникодный символ, похожий на знак %, чтобы обмануть расширятель в нужном месте. Есть забавная альтернатива: ℅
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
2MVV
1. Создать два батника 1.bat и 2.bat произвольного содержания и поместить их, скажем, в c:\Test;
2. Создать кнопкуВыполнить батник не получается, вне зависимости от числа знаков % перед 1.
3. Меняем кнопкуВсе работает! Отсюда первый вопрос (не слишком важный) - почему? Дело в расширении "bat"? Но ведь оно относится ОСью к исполняемым, наряду с "ехе", "com" и "cmd".
4. Опять меняем кнопку(Понятное дело, Тотал установлен на C). Сообщение "System cannot find the path specified". Разве AskParam не разворачивает %COMMANDER_что_угодно% перед передачей интерпретатору? В этом второй вопрос (хотя ответ, видимо, содержится здесь).
Третий вопрос (самый важный) - как вообще выполнить батник через AskParam с использованием переменных окружения?
1. Создать два батника 1.bat и 2.bat произвольного содержания и поместить их, скажем, в c:\Test;
2. Создать кнопку
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\AskParam\AskParam64.exe
/u1 /t2 /p "c:\Test\%%1.bat"
C:\utils\totalcmd\WCMICONS.DLL
Batches
-13. Меняем кнопку
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\AskParam\AskParam64.exe
/u1 /t2 /p cmd /k "c:\Test\%%1.bat"
C:\utils\totalcmd\WCMICONS.DLL
Batches
-14. Опять меняем кнопку
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\AskParam\AskParam64.exe
/u1 /t2 /p cmd /k "%%COMMANDER_DRIVE%%\Test\%%1.bat"
C:\utils\totalcmd\WCMICONS.DLL
Batches
-1Третий вопрос (самый важный) - как вообще выполнить батник через AskParam с использованием переменных окружения?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Это происходит потому, что в пути к вызываемой программе раскрываются только переменные окружения, но не подстановочные параметры.Выполнить батник не получается, вне зависимости от числа знаков % перед 1.
Учитывая вышесказанное, ответ должен прийти сам: здесь путь к батнику уже является параметром программы, а не частью пути к ней.Вахмурка писал(а):Все работает! Отсюда первый вопрос (не слишком важный) - почему? Дело в расширении "bat"? Но ведь оно относится ОСью к исполняемым, наряду с "ехе", "com" и "cmd".
Здесь COMMANDER_DRIVE должна нормально разворачиваться, т.к. это не псевдопеременная. Открой cmd из тотала и выполни set c, все переменные там - это реальные переменные окружения, которые AskParam может разворачивать, в отличие от переменных типа $DESKTOP, о которых известно только тоталу (все псевдопеременные в тотале начинаются с $).Вахмурка писал(а):Сообщение "System cannot find the path specified". Разве AskParam не разворачивает %COMMANDER_что_угодно% перед передачей интерпретатору? В этом второй вопрос (хотя ответ, видимо, содержится здесь).
Однако в силу того, что путь к батнику здесь указан в строке параметров запускаемой программы, а AskParam раскрывает переменные окружения после подстановки своих параметров, знаки процента вокруг переменной окружения надо дополнительно удваивать: /u1 /t2 /p cmd /k "%%%%COMMANDER_DRIVE%%%%\Test\%%1.bat" (половину знаков % при анализе строки параметров скушает тотал, вторую половину - AskParam).
Вариантов могу назвать два:Вахмурка писал(а):Третий вопрос (самый важный) - как вообще выполнить батник через AskParam с использованием переменных окружения?
1. Сама система при вызове батника автоматически вызывает для него интерпретатор cmd, т.к. батник не является исполнимым файлом, поэтому вполне можно использовать вариант с явным вызовом cmd. Но тогда важно не забыть правильно передать аргументы батника: cmd /c ""c:\Test\%%1.bat" arguments" (дополнительные внешние кавычки вокруг всей командной строки после /c обязательны, т.к. cmd в силу своей природной тупости очень любит их оттуда снимать).
2. Так как AskParam автоматически определяет переменные окружения с ответами, их можно использовать в пути к вызываемой программе вместо подстановочных параметров: c:\Test\%AskParam1%.bat.
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
А сложно будет переделать программу, чтобы опции представлялись в виде не dropdown list, а набора radiobutton'ов? Результат, понятно, тот же. Плюсы: 1) экономия щелчка на раскрытие списка: 2) наглядность. Минус я вижу только один - изменение размеров окна в зависимости от числа пунктов. Будет также и ограничение на максимальное число оных. Но все же - программно это сложно обеспечить?
Добавлено
Забыл сказать очевидное - режим задается ключом, скажем, /o. По умолчанию - текущее состояние
Добавлено
Забыл сказать очевидное - режим задается ключом, скажем, /o. По умолчанию - текущее состояние
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Еще один запрос по "косметике": если сейчас вставить символ табуляции до двоеточия в режиме /p(h), то он (символ табуляции) игнорируется, превращаясь в пробел. Нельзя ли добавить ключ, чтобы в dropdown list'е комментарий (до двоеточия) и параметр (после) выравнивались по столбцам:То есть что-то типа ключа \t в меню Тотала. Если трудно сделать, чтобы нужное число табуляций вставлялось автоматически, то эту задачу можно переложить на широкие плечи юзверя. Синтаксис, например, такой:- вставить 3 табуляции и т.д.
Код: Выделить всё
Comment 1 : Key1
Long Comment 2 : Key2
Very Long Comment 3 : Key3Код: Выделить всё
/t(3)Подсказка: КлючСайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Подтверждаю. Я ее в том числе и независимо использую. Если нет параметров %P и %N и прочих, то Тотал вообще ни при чем...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)