Замена разделителя в параметрах, при создании кнопки

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Замена разделителя в параметрах, при создании кнопки

Сообщение ADWizard »

Всем привет! Есть программа которая занимается копированием. Из командной строки запускается так

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

"prog1.exe" <source path> <destination>
.
Пытаюсь создать кнопку для этой программы

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

TOTALCMD#BAR#DATA
"c:\Copy64.exe"
%P%N %T%N
c:\Copy64.exe
Copy64
c:\

-1
.
Кнопка работает и копирует текущий каталог/файл с одной панели на другую. Для копирования нескольких/выделенных элементов командная строка должна иметь вид

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

"prog1.exe" <source1 path;source2 path;....> <destination>
.
Сделал кнопку

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

TOTALCMD#BAR#DATA
"c:\Copy64.exe"
?%P%S "%T"
c:\Copy64.exe
Copy64
c:\

-1
.
Вывод получаю с разделителем пробел т.е.
"файл1" "файл2" "папка назначения", а нужен разделитель ';' т.е. "файл1";"файл2" "папка назначения".
Подскажите, как этого добиться?
Последний раз редактировалось ADWizard Вт май 25, 2021 14:19, всего редактировалось 1 раз.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ADWizard
Во-первых, не очень понятно, зачем в TC для банального копирования (хоть одного объекта, хоть нескольких выделенных) из активной панели в неактивную понадобилась какая-то утилита, о которой я, например, не имею ни малейшего понятия (об используемым в ней синтаксисе и о том, чем вам не угодил пробел как разделитель, соответственно, тоже). Этот самый пробел на точку с запятой в стандартном функционале TC по передаче списка выделенных файлов в командную строку вы не замените никак (кроме как руками в самой строке, естественно).
Во-вторых (это уже по форме), согласно правилам форума в конце предложений должны ставиться точки, а ненужные пустые строки сообщения не украшают.
Недочёты в обеих кнопках не комментирую, поскольку гораздо больше меня занимает вопрос: зачем это всё вообще нужно делать в программе, которая сама по себе предназначена для нормального копирования файлов?
Даже самая богатая фантазия
Не представит себе наши безобразия.
ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Сообщение ADWizard »

Avada
Какое радушие. Слегка поправил оформление спасибо за указанные недочет. Коды кнопок даны для облегчения восприятия, не более того.
Далее по ответу. Не совсем понятно почему вы должны понимать и тем более знать эту программу (синтаксис которой я явно указан). Лично мне все равно какой разделитель, а вот этой программе нет. Ну и последнее, не обязательно было писать такой опус, раз ваш ответ ограничивается единственным предложением по теме
Этот самый пробел на точку с запятой в стандартном функционале TC по передаче списка выделенных файлов в командную строку вы не замените никак (кроме как руками в самой строке, естественно).
За ответ, спасибо.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ADWizard
Вопросы мои совершенно разумны и логичны для тематического форума по Total Commander в силу самой специфики этой программы. А предложения, возможно, последовали бы и другие (скажем, с какими-то вариантами сторонней автоматизации), если бы вы предпочли форму более конструктивного диалога и уточнили саму задачу безотносительно к утилите. Впрочем, не хотите ничего пояснять — ваше дело.
Даже самая богатая фантазия
Не представит себе наши безобразия.
ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Сообщение ADWizard »

Утилита написана на заказ во времена царя гороха. Имеет более 500 настроек копирования (ТС такое не под силу), имеет GUI и как бонус умеет работать с командной строкой (формат который я указал). К сожалению нет возможности переопределить командную строку т.к. ни конторы которая её писала, ни исходники не сохранились. Хотелка прикрутить утилиту к ТС реализована на 50%, на 100% не дано из-за указанного выше. Се-ля-ви. 50% тоже не плохо, хоть и накладывает ряд ограничений.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

ADWizard
Может, попробовать для 2-9 выделенных файлов суррогатный вариант, в котором %P%S заменить на %C1;%C2;%C3;%C4;%C5;%C6;%C7;%C8;%C9?
Не знаю, как сработает утилита, если выделено будет меньше 9 файлов: там в параметрах вылезут лишние ;.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ADWizard
Более 500 настроек копирования — это звучит крайне интригующе. А посмотреть сие сокровище можно или на его распространение наложены ограничения?
Даже самая богатая фантазия
Не представит себе наши безобразия.
ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Сообщение ADWizard »

Спасибо за совет. Первое конструктивное предложение.
Проверил, работает но странно. Если исходные пути не содержат пробелов, то копируется нормально, если содержат, то не копируется. При этом одиночный каталог/файл копируется в любом случае.

Добавлено спустя 2 минуты:
А посмотреть сие сокровище можно или на его распространение наложены ограничения?
К сожалению вы совершенно правы, наложено ограничение, т.к. за этот продукт были плачены хорошие деньги.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

ADWizard писал(а): Если исходные пути не содержат пробелов, то копируется нормально, если содержат, то не копируется.
Из-за кавычек, наверное, в которые TC заключает имена с пробелами…
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ADWizard писал(а):Имеет более 500 настроек копирования
Но не умеет работать со списком файлов?

Попробуйте завернуть в VBScript, типа

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

Set WshShell = CreateObject("WScript.Shell")

Dim iMax = WScript.Arguments.Count - 1
Dim sList = """" & WScript.Arguments.Item(0) & """"

For iCount = 1 to iMax
    sList = sList & ";""" & WScript.Arguments.Item(iCount) & """"
Next

WshShell.Run """C:\Copy64.exe"" " & sList & " """ & WScript.Arguments.Item(iMax + 1) & """", 1, False
Сохранить как, например, Copy64.vbs, параметры те же - %P%S "%T"
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Avada писал(а):Более 500 настроек копирования — это звучит крайне интригующе. А посмотреть сие сокровище можно или на его распространение наложены ограничения?
Я знаю подобный продукт - Xxcopy, о котором я написал статью.
Я, любимый писал(а):Количество ключей точному подсчету не поддается, по моей оценке - около двухсот
Программа распространяется свободно, но с недавних пор проект закрыт. Что, впрочем, не мешает программой пользоваться.
Работа со списками, разумеется, есть, но для обработки и использования в ТС требуется легкая обработка скриптами, что я неоднократно и делал, например, так.
В запрашиваемом случае, пожалуй, тоже без скриптов не обойтись...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Сообщение ADWizard »

Из-за кавычек, наверное, в которые TC заключает имена с пробелами…
Увы нет, пробовал удаляя их вручную в диалоге.

Skif_off
Спасибо, но увы ошибка

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

Ошибка
строка 3 
символ 10
предполагается наличие окончания инструкции
код 800а0401
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

ADWizard писал(а):Увы нет, пробовал удаляя их вручную в диалоге.
А утилита копирует нормально несколько файлов с путями, содержащими пробелы (без привязки к способу указания параметров)?
ADWizard
Сообщения: 8
Зарегистрирован: Вт май 25, 2021 11:57

Сообщение ADWizard »

sa
Да, вот такой бат вполне себе работает.

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

c:\copy64.exe  "D:\tm p1\EStaff;D:\tm p1\cer";"D:\tm p1\tmp.reg"  "C:\tmp\1" 
pause
Добавлено спустя 4 минуты:

Нашел где проблема, после публикации кода.
Утилита каталоги воспринимает в общих кавычках, а файлы должны быть в персональных. Да уж. похоже тут все интересней чем предполагалось :?

Добавлено спустя 10 минут:

Skif_off
Но не умеет работать со списком файлов?
Почему же, умеет, при том не просто список, а создаёт целый профиль со всеми настройками сразу который достаточно загрузить. Просто хотелось подружить ТС и её.

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

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

c:\copy64.exe  "D:\Источник 1\папка;D:\Источник 2\папка;D:\Источник 3\файл.ххх;"  "C:\Назначение\папка"
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

ADWizard писал(а):если в путях источника есть пробелы командная строка должна выглядеть так
А с такой строкой

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

""D:\Источник 1\папка";"D:\Источник 2\папка";"D:\Источник 3\файл.ххх;""
не работает, случайно?
Ответить