Это уже давно обсуждалось в отдельной теме.Avada писал(а):А, пардон, мы же это уже обсуждали.
Работа параметров %P%S
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Вот пример кнопки, в которой я осознанно использую разницу "щёлкнуть - тащить"Avada писал(а):о других случаях перетаскивания в TC, когда на самом деле гораздо проще щёлкнуть, чем тащить
Код: Выделить всё
TOTALCMD#BAR#DATA
%Commander_Path%\Plugins\wlx\Imagine\Imagine.exe
/browse:"%P"
%Commander_Path%\Plugins\wlx\Imagine\Imagine.exe
Imagine
0
-1Нет. Как я уже уточнял выше, такая кнопка работает (на XP) только если в полных именах передаваемых файлов нет пробелов, т.ч. не может считаться рабочей.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 - такая:(разница - как раз в той самой паре кавычек, которую CMD из семерки удаляет - кстати, заодно уточнили, что командный процессор в семерке эту кавычку удаляет, а в XP - нет)Код: Выделить всё
TOTALCMD#BAR#DATA cmd /c ""C:\TEMP\my downloads\1.bat" %P%S" %COMMANDER_PATH%\TOTALCMD.EXE pngslim -1
Проверь-ка на 7 такую конструкцию:
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c call "C:\TEMP\my downloads\1.bat"
%P%S
%COMMANDER_PATH%\TOTALCMD.EXE
pngslim
-1
Кстати, да, вызов команды call избавляет командную строку от открывающей кавычки, следовательно, кнопка должна быть универсальной. Но такое извращение отнюдь не очевидно. 
Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
действительно на 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""
Хрен поймешь логику ХРенового командного процессора... Наверное, женская...
Хм, кстати, вот такая кнопка тоже работает везде, хотя и смотрится тупо:
Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
Tol!k писал(а):Нет. Как я уже уточнял выше, такая кнопка работает (на 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
Из справки по cmd.exe:MVV писал(а):Хрен поймешь логику ХРенового командного процессора... Наверное, женская...
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:
1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
- ключ /S отсутствует
- есть ровно два символа кавычек
- между ними нет других специальных символов, как то: &()@^|
- между ними имеются один или несколько пробелов
- строка, заключенная в кавычки, является именем исполнимого
файла.
2. В противном случае, проверяется первый символ, и если он является
символом кавычек, то он удаляется, также удаляется последний
символ кавычек в командной строке, а весь текст после этого
последнего символа кавычек сохраняется.
Win7 SP1 Ultimate x64, TC8.52a x64
Предугадать это не возможно, т.ч. нужно обходить.gora писал(а):1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
...
- есть ровно два символа кавычек
...
Ну и отличненько. Ставим штамп [рекомендовано]MVV писал(а):Загрузил виртуальную машину с семеркой - кнопка работает и там, что и следовало ожидать.
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12
ХР снимает кавычки, если кавычка - первый символ строки параметров, поэтому, если поставить перед "%Р какой-нибудь ненужный параметр, все будет работать. Проверял на пользовательской команде (em_...), строка параметров:в батнике вместо %1, %2 обрабатываем, соответственно, %2, %3. Для "%P%S" с обработкой в цикле - просто поставить shift в начале цикла, а не в конце.
Код: Выделить всё
param= a %P%N "%T%O"
Последний раз редактировалось Serge Yolkin Чт авг 19, 2010 11:16, всего редактировалось 1 раз.
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12
Если параметры содержат пробелы, то так все равно не работает:
А с call работает и без таких извращений.
И вообще нелогичное поведение - проверять кавычку перед первым параметром, а не перед нулевым - нулевой параметр идет в командной строке CMD сразу после /C, а первый еще и найти надо.
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd /c "F:\Temp\my downloads\1.bat"
o %P%S
%COMMANDER_PATH%\TOTALCMD.EXE,3
1
-1
И вообще нелогичное поведение - проверять кавычку перед первым параметром, а не перед нулевым - нулевой параметр идет в командной строке CMD сразу после /C, а первый еще и найти надо.
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12
Обнаружил в ходе экспериментов по этой теме:
переменная %TEMP% содержит короткий путь к папке
TEMP=C:\DOCUME~1\Serge\LOCALS~1\Temp
в DirMenu пишупри переходе из меню в TEMP заголовок панели отображает короткий путь и параметр %P%N тоже передает короткий.
переменная %TEMP% содержит короткий путь к папке
TEMP=C:\DOCUME~1\Serge\LOCALS~1\Temp
в DirMenu пишу
Код: Выделить всё
menu19=TEMP
cmd19=cd %TEMP%- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
А если открыть командную строку и дать команду set? Просто у меня в ТЕМР длинный путь и вообще все пучком (Win7x64)
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12
Вахмурка
Говорю же: в TEMP - короткий путь. Set'ом и проверил.
Еще забавная подробность: похоже, %P, если имя с пробелами, заканчивается переносом строки, или еще чем подобным. Проверял под Vista следующим образом:если имя без пробелов - пробелы и подчерк в конце отображаются, если с пробелами - курсор мигает сразу после последней буквы. Set (без /p) и потом эхо/пауза в обоих случаях работает нормально. Есть у кого информация?
Говорю же: в TEMP - короткий путь. Set'ом и проверил.
Еще забавная подробность: похоже, %P, если имя с пробелами, заканчивается переносом строки, или еще чем подобным. Проверял под Vista следующим образом:
Код: Выделить всё
cmd=cmd /v /c
param= Set /p #= %N _
В %P, если имя с пробелами, оно заключено в кавычки, и только. Думаю, это может служить сигналом для команды set, что нужно взять только ту часть остатка строки, которая заключена в кавычки.
А насчет переменной TEMP похоже так и есть - создал нового пользователя (у меня временная папка обычно лежит в корне диска, поэтому путь рукописный), у этого нового пользователя в этой переменной прописано значение C:\DOCUME~1\User\LOCALS~1\Temp.
А насчет переменной TEMP похоже так и есть - создал нового пользователя (у меня временная папка обычно лежит в корне диска, поэтому путь рукописный), у этого нового пользователя в этой переменной прописано значение C:\DOCUME~1\User\LOCALS~1\Temp.
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12