Страница 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 избавляет командную строку от открывающей кавычки, следовательно, кнопка должна быть универсальной. Но такое извращение отнюдь не очевидно. :D

Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
Tol!k писал(а):Нет. Как я уже уточнял выше, такая кнопка работает (на XP) только если в полных именах передаваемых файлов нет пробелов, т.ч. не может считаться рабочей.
:shock: действительно на XP не работает... Вот уж ни разу не врублюсь, почему... мелкомягкие тут разорвали мой мозг! :o

Работает: 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""

Хрен поймешь логику ХРенового командного процессора... Наверное, женская... :D

Хм, кстати, вот такая кнопка тоже работает везде, хотя и смотрится тупо:

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

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 писал(а):Хрен поймешь логику ХРенового командного процессора... Наверное, женская... :D
Из справки по cmd.exe:
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:

1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:

- ключ /S отсутствует
- есть ровно два символа кавычек
- между ними нет других специальных символов, как то: &()@^|
- между ними имеются один или несколько пробелов
- строка, заключенная в кавычки, является именем исполнимого
файла.

2. В противном случае, проверяется первый символ, и если он является
символом кавычек, то он удаляется, также удаляется последний
символ кавычек в командной строке, а весь текст после этого
последнего символа кавычек сохраняется.

Добавлено: Ср авг 18, 2010 18:23
Tol!k
gora писал(а):
1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
...
- есть ровно два символа кавычек
...
Предугадать это не возможно, т.ч. нужно обходить.
MVV писал(а):Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
Ну и отличненько. Ставим штамп [рекомендовано]

Добавлено: Чт авг 19, 2010 09:47
Serge Yolkin
ХР снимает кавычки, если кавычка - первый символ строки параметров, поэтому, если поставить перед "%Р какой-нибудь ненужный параметр, все будет работать. Проверял на пользовательской команде (em_...), строка параметров:

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

param= a %P%N "%T%O"
в батнике вместо %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 пишу

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

menu19=TEMP
cmd19=cd %TEMP%
при переходе из меню в TEMP заголовок панели отображает короткий путь и параметр %P%N тоже передает короткий.

Добавлено: Чт авг 19, 2010 17:11
Вахмурка
А если открыть командную строку и дать команду set? Просто у меня в ТЕМР длинный путь и вообще все пучком (Win7x64)

Добавлено: Вс авг 22, 2010 18:26
Serge Yolkin
Вахмурка
Говорю же: в TEMP - короткий путь. Set'ом и проверил.

Еще забавная подробность: похоже, %P, если имя с пробелами, заканчивается переносом строки, или еще чем подобным. Проверял под Vista следующим образом:

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

cmd=cmd /v /c
param= Set /p #= %N _ 
если имя без пробелов - пробелы и подчерк в конце отображаются, если с пробелами - курсор мигает сразу после последней буквы. 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 <короткий_путь> - тотал коротким и пользуется, про длинный не вспоминает.