Страница 2 из 4
Добавлено: Ср авг 18, 2010 12:55
Batya
Avada писал(а):А, пардон, мы же это уже обсуждали.
Это уже давно обсуждалось в
отдельной теме.
Добавлено: Ср авг 18, 2010 15:49
GGS
Avada писал(а):о других случаях перетаскивания в TC, когда на самом деле гораздо проще щёлкнуть, чем тащить
Вот пример кнопки, в которой я осознанно использую разницу "щёлкнуть - тащить"
Код: Выделить всё
TOTALCMD#BAR#DATA
%Commander_Path%\Plugins\wlx\Imagine\Imagine.exe
/browse:"%P"
%Commander_Path%\Plugins\wlx\Imagine\Imagine.exe
Imagine
0
-1
Попробуйте её в папке с картинками.
Добавлено: Ср авг 18, 2010 15:49
Lev
Нажатием на кнопку я просто запускаю программу.
Перетаскиванием на кнопку открываю нужный файл в программе.
И то и другое действие я делаю по нескольку раз за день, различая для себя когда какое действие я хочу выполнить.
Добавлено: Ср авг 18, 2010 17:35
Tol!k
MVV писал(а):Причем, судя по тому, что поведение программы CMD.exe различно в XP и 7, создать универсальную кнопку сложно, для XP работает такая:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c "C:\TEMP\my downloads\1.bat"
%P%S
%COMMANDER_PATH%\TOTALCMD.EXE
pngslim
-1
Нет. Как я уже уточнял выше, такая кнопка работает (на XP) только если в полных именах передаваемых файлов нет пробелов, т.ч. не может считаться рабочей.
MVV писал(а):А для 7 - такая:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c ""C:\TEMP\my downloads\1.bat"
%P%S"
%COMMANDER_PATH%\TOTALCMD.EXE
pngslim
-1
(разница - как раз в той самой паре кавычек, которую CMD из семерки удаляет - кстати, заодно уточнили, что командный процессор в семерке эту кавычку удаляет, а в XP - нет)
В XP (по крайней мере у меня) доп. кавычки удаляются, и кнопка полностью работоспособная.
Проверь-ка на 7 такую конструкцию:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c call "C:\TEMP\my downloads\1.bat"
%P%S
%COMMANDER_PATH%\TOTALCMD.EXE
pngslim
-1
На XP она работает отлично.
Добавлено: Ср авг 18, 2010 17:54
MVV
Кстати, да, вызов команды
call избавляет командную строку от открывающей кавычки, следовательно, кнопка должна быть универсальной. Но такое извращение отнюдь не очевидно.
Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
Tol!k писал(а):Нет. Как я уже уточнял выше, такая кнопка работает (на XP) только если в полных именах передаваемых файлов нет пробелов, т.ч. не может считаться рабочей.

действительно на XP не работает... Вот уж ни разу не врублюсь, почему... мелкомягкие тут разорвали мой мозг!
Работает:
cmd /c "F:\TEMP\my downloads\1.bat" D:\test
Не работает:
cmd /c "F:\TEMP\my downloads\1.bat" "D:\Program Files"
Н
о работает:
cmd /c ""F:\TEMP\my downloads\1.bat" "D:\Program Files""
Хрен поймешь логику ХРенового командного процессора... Наверное, женская...
Хм, кстати, вот такая кнопка тоже работает везде, хотя и смотрится тупо:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c ""F:\TEMP\my downloads\1.bat"
%P%S"
%COMMANDER_PATH%\TOTALCMD.EXE
pngslim
-1
Добавлено: Ср авг 18, 2010 18:22
gora
MVV писал(а):Хрен поймешь логику ХРенового командного процессора... Наверное, женская...

Из справки по cmd.exe:
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:
1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
- ключ /S отсутствует
- есть ровно два символа кавычек
- между ними нет других специальных символов, как то: &()@^|
- между ними имеются один или несколько пробелов
- строка, заключенная в кавычки, является именем исполнимого
файла.
2. В противном случае, проверяется первый символ, и если он является
символом кавычек, то он удаляется, также удаляется последний
символ кавычек в командной строке, а весь текст после этого
последнего символа кавычек сохраняется.
Добавлено: Ср авг 18, 2010 18:23
Tol!k
gora писал(а): 1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
...
- есть ровно два символа кавычек
...
Предугадать это не возможно, т.ч. нужно обходить.
MVV писал(а):Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
Ну и отличненько. Ставим штамп
[рекомендовано]
Добавлено: Чт авг 19, 2010 09:47
Serge Yolkin
ХР снимает кавычки, если кавычка - первый символ строки параметров, поэтому, если поставить перед "%Р какой-нибудь ненужный параметр, все будет работать. Проверял на пользовательской команде (em_...), строка параметров:
в батнике вместо %1, %2 обрабатываем, соответственно, %2, %3. Для "%P%S" с обработкой в цикле - просто поставить shift в начале цикла, а не в конце.
Добавлено: Чт авг 19, 2010 09:49
Serge Yolkin
Чуть не забыл - пустой параметр надо ставить в строке параметров, а не в строке команды. Почему - не знаю.
Добавлено: Чт авг 19, 2010 12:13
MVV
Если параметры содержат пробелы, то так все равно не работает:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c "F:\Temp\my downloads\1.bat"
o %P%S
%COMMANDER_PATH%\TOTALCMD.EXE,3
1
-1
А с
call работает и без таких извращений.
И вообще нелогичное поведение - проверять кавычку перед первым параметром, а не перед нулевым - нулевой параметр идет в командной строке CMD сразу после
/C, а первый еще и найти надо.
Добавлено: Чт авг 19, 2010 16:30
Serge Yolkin
Обнаружил в ходе экспериментов по этой теме:
переменная %TEMP% содержит короткий путь к папке
TEMP=C:\DOCUME~1\Serge\LOCALS~1\Temp
в DirMenu пишу
при переходе из меню в TEMP заголовок панели отображает короткий путь и параметр %P%N тоже передает короткий.
Добавлено: Чт авг 19, 2010 17:11
Вахмурка
А если открыть командную строку и дать команду set? Просто у меня в ТЕМР длинный путь и вообще все пучком (Win7x64)
Добавлено: Вс авг 22, 2010 18:26
Serge Yolkin
Вахмурка
Говорю же: в TEMP - короткий путь. Set'ом и проверил.
Еще забавная подробность: похоже, %P, если имя с пробелами, заканчивается переносом строки, или еще чем подобным. Проверял под Vista следующим образом:
если имя без пробелов - пробелы и подчерк в конце отображаются, если с пробелами - курсор мигает сразу после последней буквы. Set (без /p) и потом эхо/пауза в обоих случаях работает нормально. Есть у кого информация?
Добавлено: Вс авг 22, 2010 19:50
MVV
В %P, если имя с пробелами, оно заключено в кавычки, и только. Думаю, это может служить сигналом для команды set, что нужно взять только ту часть остатка строки, которая заключена в кавычки.
А насчет переменной TEMP похоже так и есть - создал нового пользователя (у меня временная папка обычно лежит в корне диска, поэтому путь рукописный), у этого нового пользователя в этой переменной прописано значение C:\DOCUME~1\User\LOCALS~1\Temp.
Добавлено: Вс авг 22, 2010 20:51
Serge Yolkin
MVV
Уже сам доэкспериментировался - set /p действительно берет приглашение из кавычек, а остальную часть строки игнорирует.
А по поводу Temp - что в переменной - я знаю, меня поведение TC заинтересовало: если cd <короткий_путь> - тотал коротким и пользуется, про длинный не вспоминает.