[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
rekshd, тогда надо научить готовый лаунчер передавать ком-строку. На данный момент можно присоединить лаунчер, но он лишь запустит программу. Хотя если в Com2Selfiles.exe применить флаг сохранения файла, а в батнике прописать чтение файла, то вполне можно выполнить команду с переданными путями. В лаунчере есть хоткеи, то есть вызываем хоткей, выполняется Com2Selfiles.exe и запускает LauncherPB, то есть фактически мы при вызове хоткея видим появление LauncherPB где кликаем хоткей кнопки, лаунчер закрывается и запускает батник (с Hide скрытый), который запускает любую программу передав ей пути файлов. То есть всё готово уже, только пользоваться.
Обновил (на яндексе)
Добавлен флаг 32 и 64 для Debug. 32- запись в файл, 64 - запуск без передачи файлов, потому что лаунчер воспринимал файлы как путь у ini-файлу, теперь с флагом 64 он запускается без параметров а с параметром "Arg = " можно передать путь к ini-файлу лаунчера.

конфиг лаунчера для примера

[gui]
Title=
FormWidth=180
FormHeight=290
Columns=1
Wow64=1
Esc=1
[1]
name=Meld
exe=C:\Program Files (x86)\Meld\Meld.exe
exit = 1
hotkey=Ctrl+M
[2]
name=Notepad++
exe=C:\Program Files (x86)\Notepad++\notepad++.exe
exit = 1
hotkey=Ctrl+N
[3]
name=1by1
exit = 1
exe=C:\Program Files (x86)\1by1\1by1.exe
hotkey=Ctrl+1
[4]
name=Firefox
exe=C:\Program Files\Mozilla Firefox\firefox.exe
exit = 1
hotkey=Ctrl+F
[5]
name=AIMP
exe=C:\Program Files (x86)\AIMP\AIMP.exe
exit = 1
hotkey=Ctrl+A
[6]
name=QTranslate
exe=C:\Program Files (x86)\QTranslate\QTranslate.exe
exit = 1
hotkey=Ctrl+Q
[7]
name=msconfig
hint=Run~msconfig
exe=%systemroot%\system32\msconfig.exe
icon=msconfig.exe
exit = 1
hotkey=Ctrl+C
[8]
name=regedit
exe=regedit.exe
exit = 1
hotkey=Ctrl+R
теперь вместо EXE файлов указать батники с теми же иконками и с чтением строки из файла.
Ещё обновил оба
Добавлен Charset=0 для установки кодировки файла, так как BAT работает с Ascii и добавил read.bat для примера чтения строк батником.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
Сделал батник для примера
@Echo Off
CHCP 1251>nul
SetLocal EnableDelayedExpansion
Set file=%TEMP%\pkm.txt
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do (
  set string=!string! "%%i"
)
Start "" "C:\Program Files (x86)\Meld\Meld.exe" %string%
и передаёт 2 файла программе сравнения Meld, но проблема если в пути символ "!", то он пропадает и Meld соответственно не видит путь. Переменную %%i менял на %%~si чтобы получить короткие пути, Meld не понимает такой путь, для пробы делал %%~pi то есть взять путь из переменной и на удивление символ "!" не пропадал из пути, но это была папка, что же тогда сделать чтобы не было проблем с путями? Для теста можно заменить путь "%TEMP%\pkm.txt" на свой файл и вставить туда два пути к файлам с "!" и вывести
Echo %string%
pause

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
У меня для тестирования работы давно уже создана такая вот папка
C:\123 - Копия !№@ ку--- !ку 666\--- Тестовая платформа --- !
ca
Пробелы, русский-англицкий, знаки разные, в том числе восклицательные
Ну и длинна приличная ...
Если где-то что-то не учтено, сразу видно ...

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
Есть исчо мысль aa
Можно ли добавить возможность к экзешнику срабатывать по имени управляющего ини файла
Например:
Com2Selfiles.exe meld запустит meld через настроенный для него meld.ini
Com2Selfiles.exe TC запустит Total Commfnder через настроенный для него TC.ini
и т.д.
В таком случае будет один экзешник, и много ini файлов настроенных под разные задачи
Соответственно и ярлыки в TLB будут разные и каждый со своим хоткеем
(Да, управляющие ini файлы по структуре полностью соответствуют исходному set.ini)
В остальном поведение Com2Selfiles.exe оставить тем же, что и было
То есть, если нету дополнительного кода после экзешника, то брать информацию из исходного set.ini-
PS 1 вот настройки, которые у меня два выделенных объекта (папки или файлы) окрывают в разных панелях Total Commander

set.ini для Total Commander

[set]
Path = "D:\Portable\Total Commander\TOTALCMD.EXE" /N /T "%1" "%2"
; Arg = /i
ModeWorkDir = 0
Select = 3
Separator = " "
Debug = 0
Quotes = "
Charset = 24
-
PS 2 Вопрос оффтопик - а мелда с русским фейсом ты не встречал ?
На офсайте написано, что на 100% переведён. Вот тока рууского нигде не нашёл в нём.
Не критично конечно, но может я туплю ... an
и исчо. Мелд 3.22.0.0 2022 года у меня совершенно спокойно запускается в нативном портабл варианте с таким set.ini

set.ini для Meld

[set]
Path = D:\Portable\--- Office ---\--- Compare ---\Meld\Meld.exe
; Arg = /i
ModeWorkDir = 0
Select = 3
Separator = " "
Debug = 0
Quotes = "
Charset = 24

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
97202и исчо. Мелд 3.22.0.0 2022 года у меня совершенно спокойно запускается в нативном портабл варианте с таким set.ini
он содержит файлов на 100 Мб, он полностью тянет с собой оболочку, движок GTK3, то есть он как бы не использует ресурсы Windows, у него свой фэйс, не такой как в Windows, так как изначально написан для Linux. У меня была версия 3.18.5, скачал последнюю это чисто убунтовый фэйс GNOME, где в заголовке находятся кнопки. В 3.18.5 ещё было похоже ближе к Windows.
97202а мелда с русским фейсом ты не встречал ?
в линуксе он на русском, я даже и не заметил, так как в настройки и меню не лезу. Попробовал из линукса скопировать файл перевода и положил с таким же путём в Meld, вместо английского стали квадраты. Там бинарный файл и он может зависеть от версии, тем более "po"-файлы текстовые, а "mo" - бинарные, компилируемые из "po". Путь \Meld\share\locale\ru\LC_MESSAGES\meld.mo но и то криво сработало для версии 3.18.5, а для 3.22.0 вообще не среагировало.
На официальном сайте есть текст: Translations https://l10n.gnome.org/module/meld/
но там "po"-файл, надо компилировать в "mo" (в Linux) и пробовать как подхватится.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
Короче геморрой...
Понял для себя что ради русского языка в фейсе программы этим озадачиваться не буду.
Поскоку на языке наших заклятых партнёров читаю свободно ...
он полностью тянет с собой оболочку, движок GTK3
Теперь, до кучи, стало понятно, зачем в папках с мелдом аж тыщи четыре файлов мелкой графики ag

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
aa Посредник на основе лаунчера получился ! ЗДОРОВСКИЙ ! aa
Очень удобно, когда с одними и теми же объектами нужно произвести какую-то операцию
в разных программах. Например, операцию сравнения.
Единственный минус этого несомненного ПЛЮСА - дополнительный шаг в операции.
Если же нужно с выделенными объектами сделать какую-то разовую операцию без посредника,
то для каждой используемой программы приходится создавать отдельную папку с Com2Selfiles.exe и Com2Selfiles.ini , в котором прописан запуск этой программы.
Некритично, но не совсем идеально ...
bk Рацпредложение ah
Можно ли реализовать следующий алгоритм:
1. ini файл разделить на блоки,
в каждом из блоков прописать характеристики запуска конкретной программы
и каждому блоку придумать короткий английский идентификатор (например id1)
2 В TLB (или аналогичной программе) ярлыки запуска Com2Selfiles прописываются следующим образом:
2.1 Ярлык №1
Путь\Com2Selfiles.exe id1 запустит программу которая прописана в блоке id1 ини файла
2.2 Ярлык №2
Путь\Com2Selfiles.exe id2 запустит программу которая прописана в блоке id2 ини файла
2.3 Ярлык №3 без ID
Если же запустить Com2Selfiles.exe без идетнификатора,
то Com2Selfiles.exe считает и запустит самый "первый блок" - программу прописанную в первом блоке ини файла
! В результате Com2Selfiles.exe и Com2Selfiles.ini будут в единственном экземпляре !
А с помощью таких ключей запуска (идентификаторов в ини) можно запускать скока угодно разных программ.
Хоткеи же к каждому такому ярлыку ставятся в TLB (или аналогичной программе) на свой вкус
Это уже штатный функционал TLB

Пример предлагаемого ini файла

[ID1]
Path = C:\LauncherComLine\LauncherCL_x64.exe
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[ID2]
Path = C:\Portable\Araxis Merge\Araxis Merge.exe
Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 0
Quotes = "
Charset = 24
[ID3]
Path = "C:\Portable\Araxis Merge\Araxis Merge.exe" "%1" "%2" "%3"
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[CompareIt]
Path = C:\Portable\CompareIt\wincmp3.exe
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[MELD]
Path = C:\Portable\Meld\Meld.exe
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[TC]
Path = "C:\Portable\Total Commander\TOTALCMD.EXE" /N /T "%1" "%2"
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[Spisok]
Path = read.bat
; Arg = /i
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
[Convert]
Path = C:\Portable\--- convert by Ander_73 ---\convert.cmd
ModeWorkDir = 1
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
rekshd, Обновил, проверяй, всё должно работать, проверил используя WinMerge.
Path = "C:\Portable\Araxis Merge\Araxis Merge.exe" "%1" "%2" "%3"
такая комбинация не работает, надо просто указать путь "C:\Portable\Araxis Merge\Araxis Merge.exe" и выделить 3 файла, они передадутся одной строкой, выделишь 4 файла, передаются 4 файла, ну а использоваться как я понимаю будут 3, так как "Araxis Merge" сам будет лишнее игнорировать думаю. Можно конечно заставить если число файлов не совпадает то игнорировать, но на мой взгляд это будет только хуже, проги сами умеют действовать если им недодали или лишка передали, прога просто открывает окно для выбора второго файла, то есть в одной папке запустить, из другой перетянуть и бросить, так гибче способ.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
97822такая комбинация не работает
Это были остатки моих экспериментов недельной давности
Каюсь, забыл "%1" "%2" "%3" убрать be
Мозги немного в другом режиме были, вот и пропустил.
Двинул тестировать обнову !
PS А ты LauncherComLine не хочешь в эту тему добавить ?
Ему тут самое место, чтобы уж полный набор заклинаний был
bk
Добавлено через 6 минут 18 секунд:
Да, у меня ещё просьба, опиши подробней пожалуйста синтаксис
использования параметра Debug в ини файле.
Особенно лучше сразу с примерами.
Имеющееся описание прочитал наверно раз 13, но так до конца и не понял ...
Методом аналогии и научного тыка Debag изучаю bu
Примеры очень были бы к месту.
И, если не трудно, то примеры использования параметра Arg для Com2Selfiles ah
Добавлено через 2 часа 54 минуты 14 секунд:
Протестировал
! Шедеврально !
Усё работает идеально
aa

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
rekshd, теоретически "Debag" он не нужен, ведь главное программа запускается. Поэтому и назван Debag (Отладчик). Но если вдруг надо получить просто имена файлов без запуска каких либо программ, то задаём флаги Debag. Вместо того чтобы запустилась программа вылетает сообщение и показывает какие файлы были выделены. Причём сообщение всё же предлагает выполнить программу, если таковая есть, то есть флаг не только выдаёт информацию, но и выполняет роль подтверждение согласие на выполнение Path-программы, что если надо было просто скопировать файлы, ведь Ctrl+C на диалоговом окне копирует содержимое, мы же не можем скопировать имена файлов выделив их, так как там будет некий файловый дескриптор, а не текст для вставки. Флаги 2 и 8 сами копируют в буфер обмена, не надо копировать с окна сообщения. Другие флаги 16, 32, 64 и так в справке понятно написаны, нечем дополнить. Флаги выполняются самостоятельно, если указать все флаги, то они выполнятся все, то есть и мессага и буфер обмена и сохранение списка файлов в файл. Флаги складываешь, например 1+16+32+64=113, то есть если Debag=113, то выполняются флаги 1, 16, 32, 64. Можешь почитать, что такое битовый флаг. Флаги 4 и 8 позволят увидеть ком-строку, понять что в ней неправильно, может кавычек нет или разделитель не тот или добавочный аргумент не туда вставился.
На счёт Arg. Допустим программе передаются имена файлов:
WinMergeU.exe "путь1" "путь2"
Что если требуется добавить ключ, например чтобы получилась строка
WinMergeU.exe /i "путь1" "путь2"
тогда надо написать Arg = /i, то есть к параметрам в Arg добавятся ещё пути передаваемых файлов. Если Arg на является пустой строкой, то к содержимому Arg добавится пробел как разделитель и имена файлов, а если Arg пустая строка, то только имена файлов.
Кстати, можно поиграться с такой фичей (т.е. добавить этот функционал, его пока нет):
Arg=%p \i
Arg=\p1:%1 \p2:%2 \t \x
В чём тут смысл? Если в Arg найден %p (переменная параметра), то заменяем её на строку файлов. Что это даёт? Параметр \i может быть в конце ком-строки, а не жёстко в начале. Что если запускаемая программа требует особый порядок параметров, а не любое их расположение?
Во втором примере, если в Arg найден %1, %2 и т.д. до %9, то каждый путь файла может быть вставлен в свою позицию. Что если программа требует перед именем файла некий префикс, который идентифицирует этот параметр как особый, как файл, то есть параметры именные, тогда не получится просто вставить строку файлов.
Хотя можно поиграться разделителем и добиться этого или почти этого, но всё же такой способ может кому-то быть более удобным и понятным.
LauncherComLine не хочешь в эту тему добавить ?
Добавил в первый пост.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
В процессе тестирования возникла одна загадка, которую я пока не могу отгадать...
При работе с одиночным файлом
Com2Selfiles "захватывает полный адрес" файла, но вот как его просто вставить в консоль cmd - не понимаю
Можно конечно просто перетянуть файл в консоль, если она уже открыта, при этом по необходимости
и кавычки вокруг адреса файла проставятся ...
Но хотелось бы запустить консоль с уже захваченным Com2Selfiles адресом одиночного файла.
Пока не получается решить этот вопрос ...

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
Максимум, что получилось - открыть командную строку с адресом той папки, где я нахожусь на момент запуска хотекея

Вот код секции ини файла

[cmd]
Path = cmd
ModeWorkDir = 0
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
rekshd
как я понимаю это уже проблема батника.
cmd /k (cd "путь")
а может выполнить код который переменной %s% назначит путь, а потом ввести переменную и параметры запуска и задача решена.
cmd /k (set p="путь")

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 11 месяцев
  • Сообщений: 331
  • Репутация:7

    [+] [-]
97893как я понимаю это уже проблема батника
Дак батник я в способе описанном выше ведь вообще не использовал.
Командную строку с адресом той папки, где я нахожусь на момент запуска хотекея запускает сам Com2Selfiles.-
Кстати, с PowerShell так не получилось. Потребовалось создать батник PS.cmd с таким содержимым
PowerShell -noexit
Напрямую из ини такая команда не срабатывает, как и сам батник с относительным путём.
Вот

рабочая секция ини для PowerShell

[PowerShell]
Path = "C:\Com2Selfiles\PS.cmd"
; Path = PS.cmd Почему то не работает
ModeWorkDir = 0
Select = 3
Separator = " "
Debug = 32
Quotes = "
Charset = 24
Так же как и с cmd, PowerShell запускается с адресом той папки,
где я нахожусь на момент запуска хотекея-
Добавлено через 13 минут 47 секунд:
Повторюсь, Com2Selfiles (секция cmd) у меня железобетонно открывает окно cmd с адресом папки в которой я нахожусь на момент запуска Com2Selfiles хоткеем.
Остаётся каким то образом вставить за адресом папки имя одиночного файла, который выделен при нажатии хоткея.
Вот именно это у меня и не получается.
Причём имя этого файла должно быть экранировано " с обоих сторон при наличии в имени этого файла пробелов и\или русских букв
Спросишь Ну и зачем это нужно ? Ответ прост:
скажем, хочу я посмотреть как работает какой-либо батник.
Я запускаю батник из проводника, он выполняется и закрывается. Ничего не успеваю увидеть...
Если ж я запускаю батник из командного окна и батнике есть в конце Pause,
то я вижу что происходило при работе батника и могу скорректировать батник при необходимости.
Вот тока одно Большое НО ...
Имя самого батника приходится каждый раз вбивать ручками ...
Вот это я и хочу автоматизировать, что б в итоге получилось следующее:
Я выделяю в проводнике файл
Нажимаю хоткей
У меня открывается окно cmd с уже прописанным полным адресом этого файла
(включая имя самого файла) при необходимости экранированным "
Остаётся тока нажать Энтер !
И отслеживать работу скрипта
bv

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 8 месяцев
  • Сообщений: 1322
  • Репутация:127

    [+] [-]
rekshd
ключ /k оставляет окно cmd.exe открытым.
Arg=/k

Страница 2 из 3


Показать сообщения:    

Текущее время: 21-Ноя 16:03

Часовой пояс: UTC + 3


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