Ru-Board.club
← Вернуться в раздел «Программы»

» Total Commander (Часть 8)

Автор: aidarsimon
Дата сообщения: 19.06.2015 20:13
Не понял, как запаковать в zip архив с полным путём, чтобы в архиве корневым каталогом была буква диска. Не помню, раньше как-то делал.
Автор: Avada
Дата сообщения: 19.06.2015 21:22
aidarsimon
Во-первых, сильно сомневаюсь, что такая ZIP-архивация вообще возможна. Во-вторых, зачем это нужно?
Автор: B3T6
Дата сообщения: 19.06.2015 21:57

Цитата:
Ключ -EP3 — сохранять полные пути файлов, включая букву диска

--------------------------------------------------------------------------------

При архивировании этот ключ служит для сохранения полных путей добавляемых файлов, включая букву диска. Символ признака дисков (двоеточие) заменяется символом подчёркивания ( _ ).

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

Кроме того, ключ преобразовывает UNC-пути из \\server\share в __server\share при архивировании и восстанавливает их в исходный вид при извлечении.

Данный ключ полезен для резервного копирования информации с нескольких дисков в один архив. Например, команда

WinRAR a -ep3 -r backup.rar c:\ d:\ e:\

создаст резервную копию дисков C:, D: и E:, а команда

WinRAR x -ep3 backup.rar

восстановит из неё все данные с абсолютными путями.

Однако соблюдайте осторожность: ключ -ep3 следует использовать только в тех случаях, когда вы уверены, что распаковываемый архив не содержит никаких "злонамеренных" файлов. Иными словами, используйте этот ключ только с архивами, созданными лично вами или теми людьми, которым вы всецело доверяете. Причина в том, что данный ключ позволяет перезаписать любой файл в любой папке вашего компьютера, включая важные системные файлы, поэтому его следует применять только в целях резервного копирования.
Автор: Andarin
Дата сообщения: 19.06.2015 22:28
B3T6
Rar - это не ZIP. А в RAR эта информация в справке есть. Кроме того, здесь тема про Total Commander, если не обратили внимание.
Автор: B3T6
Дата сообщения: 20.06.2015 11:12
WinRAR умеет паковать в ZIP. WinRAR прикручивается к ТС несколькими способами.
Автор: Andarin
Дата сообщения: 20.06.2015 12:22
B3T6
Прекрасно всё выходит и с ZIP-архивом, надо только придумать как передавать нужный ключ и указание, чтобы был архив ZIP (это надо просто указать название с расширением ZIP)
aidarsimon
Это либо кнопку только в TC, либо тоже кнопку, но с помощью TCIMG
Автор: Avada
Дата сообщения: 20.06.2015 12:23
B3T6
Можно увидеть синтаксис командной строки для предлагаемого способа архивации? С выполнением этого через интерфейс WinRAR, как справедливо было сказано выше, проблем нет.
Автор: Andarin
Дата сообщения: 20.06.2015 12:28
Avada
синтаксис приведён в цитате из справки:
Цитата:
WinRAR a -ep3 -r backup.rar c:\ d:\ e:\

Вместо дисков список файлов для упаковки и backup.zip надо вместо rar (и -r убрать)
Автор: B3T6
Дата сообщения: 20.06.2015 12:56
ещё нужен ключ -afzip

Добавлено:

Цитата:
ибо кнопку только в TC, либо тоже кнопку, но с помощью TCIMG

пользовательская команда;
MultiArc.wcx
Автор: Andarin
Дата сообщения: 20.06.2015 13:48

Цитата:
ещё нужен ключ -afzip

Можно и без этого ключа, только тогда в имени архива указать расширение ZIP.
Нюанс - это только в WinRAR, консольная версия архивы ZIP создавать не умеет.
B3T6 А как к MultiArc это дело прикрутить, в случае использования WinRAR как внешней программы для упаковки? Кроме того, я полагаю, будет либо так, либо стандартно, без выбора. А пользовательская команда - всё равно кнопку делать (хотя можно и хоткей)

Добавлено:
Кстати, а почему, если в командной строке указать полный путь Winrar (C:\Program Files\WinRAR\WinRAR.exe a -ep3 arch.zip) вместо просто (WinRAR.exe a -ep3 arch.zip), то пишет "файл не найден"? В активной панели другой диск и каталог.
Автор: Avada
Дата сообщения: 20.06.2015 15:20
B3T6
Andarin
Если это хочется сделать с WinRAR через интерфейс TС, то в диалоге упаковки в поле расширение архива (после точки, а не в начале строки!) ручками меняется на zip и добавляется ключ -ep3. В принципе с помощью дочернего плагина TCDirMenu для TWinKey процедуру этой замены/вставки можно упростить, там вместо ручной замены расширения или ввода ключа будет достаточно выбрать нужный пункт из специального пользовательского меню, вызванного в диалоге упаковки TC (подробности — в документации TWinKey).
А что касается ненайденного файла, то советую проверить это дело при другом расположении WinRAR.exe (не в Program Files).
Автор: Andarin
Дата сообщения: 20.06.2015 17:09
Avada
Я, если надо было такой архив (очень редко), делал это через WinRAR непосредственно. Но этот метод работает на все 100% (а-то думал, куда ключи в нужном случае приспособить).
А про полный путь в командной строке - так системная Program Files (и Program Files (x86) у меня на диске C:, а WinRAR на диске D: . Я просто так указал, как по умолчанию.
PS Хотя на диске D, но тоже в Program Files. Банально перенёс в D:\WinRAR, заработало.
Автор: oshizelly
Дата сообщения: 24.06.2015 15:26
Rodny 20:47 25-05-2015
Цитата:
Только кнопка/и т.п. Строки вкладки "Архиватор" отвечают только за упаковку.

Возвращаясь к вашему совету месячной давности. В ходе работы выяснилось одно неприятное обстоятельство, о котором почему-то сразу не подумалось. А именно, в варианте с командой/кнопкой теряется главное удобство TC, то есть, работа с архивами как с папками. Моя первоначальная идея была в том, чтобы после ввода пароля содержимое архива открывалось бы на панели TC, как это делается с обычным архивом. А через командную строку этого, как я понимаю, не реализуешь.

Кроме того, если иметь две кнопки, одну для обычных архивов и другую для защищённых паролем, то для правильного выбора кнопки надо знать заранее, защищён ли данный архив паролем или нет - что в большинстве случаев просто нереально.

То есть, получается, что задача вообще не решается иначе, чем через родной GUI-интерфейс самого WinRar?
Автор: Rodny
Дата сообщения: 24.06.2015 17:24
oshizelly
Что-то мне кажется, что для незапароленных архивов этот параметр просто будет игнорироваться.
Автор: Skif_off
Дата сообщения: 24.06.2015 19:25
oshizelly

Цитата:
Моя первоначальная идея была в том, чтобы после ввода пароля содержимое архива открывалось бы на панели TC, как это делается с обычным архивом.

ТС разве делает не так?
Прошу прощения, не уловил: вам нужно открыть архив как папку или распаковать? Или распаковать, если файл защищён паролем?
Автор: Andarin
Дата сообщения: 24.06.2015 19:34
Skif_off

Цитата:
ТС разве делает не так?

Именно так делает. И на панели открывает, и распаковывает, как из обычной папки.
Автор: oshizelly
Дата сообщения: 24.06.2015 19:58
Rodny
Skif_off
Andarin

Прошу извинить, запутался уже сам в собственных мыслях. Вопрос сформулирован очень неудачно, сам бь тоже не понял, что имеется в виду

На самом деле хотел спросить вот что: после того, как запароленный архив открыт как папка на панели TC, можно ли сделать так, чтобы по нажатию кнопки происходило извлечение в заданную (или указанную пользователем в ответ на запрос) папку только выделенных в данный момент папок и файлов.
Автор: Skif_off
Дата сообщения: 24.06.2015 20:15
oshizelly
Думается, можно открыть в неактивной панели нужную папку. Такой вариант подойдёт?
Автор: oshizelly
Дата сообщения: 24.06.2015 20:45
Skif_off 20:15 24-06-2015
Цитата:
Думается, можно открыть в неактивной панели нужную папку. Такой вариант подойдёт?

Ну, нельзя сказать, чтобы я сам не додумался до этого варианта Просто это несколько лишних телодвижений: перейти на другую панель, создать новую вкладку, перейти в ней к нужной папке, вернуться обратно, нажать на [F5], дожждаться завершения распаковки, перейти на другую панель, закрыть ненужную вкладку, вернуться обратно... Думал, что можно на них сэкономить. Но это, в общем-то, не критично.
Автор: Skif_off
Дата сообщения: 24.06.2015 20:55
oshizelly
На AutoIt это будет [more=как-то так:]

Код: #NoTrayIcon

Global Const $WM_COPYDATA = 0x004A

$hTC = WinGetHandle('[CLASS:TTOTAL_CMD]')
AutoItWinSetTitle(@ScriptFullPath)
$hWndPar = WinGetHandle(@ScriptFullPath)

#Region ;Обрабатываем командную строку, если пустая - появится окно выбора каталога
If $CmdLine[0] = 0 Then
While 1
$sPath = FileSelectFolder('Укажите каталог для распаковки', '', 7)
If @error And $sPath = '' Then Exit
If @error Or Not StringInStr(FileGetAttrib($sPath), "D") Then
MsgBox(4096, 'Выбор каталога для копирования', 'Вы указали "' & $sPath & '", а не каталог')
Else
ExitLoop
EndIf
WEnd
ElseIf $CmdLine[0] = 1 Then
$sPath = StringTrimRight($CmdLine[1], 1)
Else
Exit
EndIf
#EndRegion

_TC_cd_command('', $sPath, 'ST') ;открываем каталог в неактивной панели в новой вкладке
ControlSend('', '', $hTC, '{F5}') ;посылаем F5
$hWnd = WinWait('[CLASS:TInpComboDlg]') ;ждем появления окна копирования и
ControlSend('', '', $hWnd, '{ENTER}') ;отправляем ему Enter

; =============================================================================
; CD для перехода в другой каталог на одной или обеих панелях.
; Строка lpData должна быть в следующем формате (пример для языка C/C++):
; "c:\\test1\x0dc:\\test2\x00ST\x00"
; Первый путь - левая панель, второй - правая; любой из них может быть опущен (но симмвол-разделитель \x0d должен оставаться).
; Флаги после первого нулевого символа опциональны. "S": трактовать пути как исходный/целевой; "T": открывать пути в новых вкладках.
; Аналог:
; $COMMANDER_EXE = EnvGet('COMMANDER_EXE')
; Run('"' & $COMMANDER_EXE & '" /O /S /T /L="' & $left & '" /R="' & $right & '"')

Func _TC_cd_command($l, $r, $sFlag = '')
Local $sCommand = $l & @CR & $r & ChrW(0) & $sFlag
Local $pCDcom = DllStructCreate("char[" & StringLen($sCommand)+ 1 & "]")
Local $pCopyData = DllStructCreate("ulong_ptr;dword;ptr")
DllStructSetData($pCDcom, 1, $sCommand)
DllStructSetData($pCopyData, 1, Asc('C') + 256 * Asc('D'))
DllStructSetData($pCopyData, 2, DllStructGetSize($pCDcom))
DllStructSetData($pCopyData, 3, DllStructGetPtr($pCDcom))
DllCall("user32.dll", "int", "SendMessageW", "hwnd", $hTC, "int", $WM_COPYDATA, "wparam", $hWndPar, "lparam", DllStructGetPtr($pCopyData))
EndFunc
Автор: oshizelly
Дата сообщения: 24.06.2015 21:18
Skif_off 20:55 24-06-2015
Цитата:
На AutoIt это будет как-то так: [?]
Вы, кажется, используете TCIMG, тогда можно запускать скрипт с его помощью:

Огромное спасибо за помощь и отдельно за оперативность

Вот только я не понял, для чего в данном случае нужен TCIMG. Разве нельзя запустить скрипт AutoIt непосредственно юзер-командой TC? Я действительно пользуюсь TCIMG, просто хочется докопаться до автора до смысла данного решения.
Автор: Andarin
Дата сообщения: 24.06.2015 22:11
oshizelly
А вообще зачем в данном случае что-то лишнее? Выделяем нужные файлы (в архиве), жмём F5, указываем в диалоге распаковки нужную папку (с полным путём). И всё, вуаля! Можно нажать кнопку "дерево" и указать там нужную папку. То, что требовали:
Цитата:
извлечение в заданную (или указанную пользователем в ответ на запрос) папку
Автор: Abel11
Дата сообщения: 24.06.2015 22:56
oshizelly 19:58 24-06-2015
Цитата:
после того, как запароленный архив открыт как папка на панели TC, можно ли сделать так, чтобы по нажатию кнопки происходило извлечение в заданную (или указанную пользователем в ответ на запрос) папку только выделенных в данный момент папок и файлов.

В TCIMG это есть, примеры
Автор: oshizelly
Дата сообщения: 24.06.2015 23:06
Andarin 22:11 24-06-2015
Цитата:
А вообще зачем в данном случае что-то лишнее? Выделяем нужные файлы (в архиве), жмём F5, указываем в диалоге распаковки нужную папку (с полным путём). И всё, вуаля! Можно нажать кнопку "дерево" и указать там нужную папку.

Блин, действительно
Самое смешное и обидное, что про этот способ ручного ввода пути к целевой папке в диалоге копирования я отлично знаю и не раз его использовал в разных ситуациях. А тут вот как-то не додумался связать это знание с собственным запросом
Спасибо! Теперь у меня имеется целых два удобных решения.
Автор: Skif_off
Дата сообщения: 24.06.2015 23:13
oshizelly

Цитата:
Вот только я не понял, для чего в данном случае нужен TCIMG. Разве нельзя запустить скрипт AutoIt непосредственно юзер-командой TC?

Для запуска скриптов AutoIt нужен интерпретатор: либо AutoIt.exe из дистрибутива, либо компилировать скрипт (по сути - "склеивание" интерпретатора и скрипта). AutoIt позволяет в качестве интерпретатора использовать почти любой скомпилированный скрипт - экономия места, в общем.
Автор: YuraseK
Дата сообщения: 29.06.2015 12:51
Есть большая папка с подпапками, структуру которой необходимо повторить на другом диске, но без содержимого в виде файлов и папок с вложенностью дальше первой подпапки.
Как такое можно сделать в TC с минимальными усилиями?
Можно ли при сравнении в диалоге синхронизации указать фильтр, который бы выводил только папки или сравнивал на определённую глубину как при поиске?
Автор: MentalWarrior
Дата сообщения: 01.07.2015 09:52
Что-то последнее время начал себя странно вести - зависает. Не могу понять в чём причина. Пока думаю на то, что зависает при попытке открытия сететвых папок на другом компе (поскольку стоит запоминание текущей позиции на обоих панелях). Но вроде бы не только в этом случае проявляется.
Вот эээээ..... лог:
[more=Тынц]Описание:
Ошибка привела к остановке взаимодействия программы с Windows.

Сигнатура проблемы:
Имя события проблемы:    AppHangB1
Имя приложения:    TOTALCMD.EXE
Версия приложения:    8.5.1.1
Отметка времени приложения:    2a425e19
Сигнатура зависания:    98dd
Тип зависания:    0
Версия ОС:    6.1.7601.2.1.0.256.1
Код языка:    1049
Доп. сигнатура зависания 1:    98dd1cb43fb7f05495703c9c7847034d
Доп. сигнатура зависания 2:    ff15
Доп. сигнатура зависания 3:    ff153ea981dd03d5a69d0c7ecbbef5a1
Доп. сигнатура зависания 4:    98dd
Доп. сигнатура зависания 5:    98dd1cb43fb7f05495703c9c7847034d
Доп. сигнатура зависания 6:    ff15
Доп. сигнатура зависания 7:    ff153ea981dd03d5a69d0c7ecbbef5a1[/more]
Самое неприятное - закрытие процесса представляет собой проблему из проблем. Ничего толком не помогает. Ни закрытие зависшей программы, ни остановка процесса. Периодически только спрашивает "закрыть процесс" Начал даже перезагрузку эксплорера делать. В надежде на то, что результат хоть какой будет. Вроде бы помогает. Хотя и не уверен до конца.
Пы.сы.: Win7 x64 sp1, Total Commander 8.51a x86 PowerPack 2015.01.
Автор: Avada
Дата сообщения: 01.07.2015 10:09
MentalWarrior
Для обсуждения работоспособности сборок есть другая ветка (ссылка в шапке). Здесь это имеет смысл обсуждать только в случае, если то же самое происходит с TC, установленным из дистрибутива и настроенным самостоятельно.
Автор: MentalWarrior
Дата сообщения: 01.07.2015 10:24
Хм. Вот уж не думал, что есть какая-то разница. Принципиальных отличий нет для базовых функций. Ладно. Уговорили.
Автор: Avada
Дата сообщения: 01.07.2015 11:05
MentalWarrior
Да, только в теме по сборкам надо указать конкретную сборку, как это сделано здесь.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176

Предыдущая тема: Распечатка брошюры в Word 2003


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.