Упаковка выделенного в ISO-образ
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Упаковка выделенного в ISO-образ Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 17:07
    —
Flasher wrote:
сделай плагин для упаковки в ISO выделенного

Не вижу особых проблем прямо сейчас. Для командной строки утилиты есть, воткнуть их в MultiArc...

 !  Avada:
Выделено в самостоятельную тему отсюда.

#2:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 17:11
    —
Rodny
Выделенных элементов? Ну-ка, ну-ка. -path-list у mkisofs для cygwin не работает. CDIMAGE со списками не работает. Или ты что-то другое знаешь?

#3:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 17:39
    —
Flasher wrote:
-path-list у mkisofs для cygwin не работает

Не понял, при чём тут cygwin?
Code:
Add=%PQA -r -J -o %AQA -path-list %LQA

#4:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 17:42
    —
Rodny wrote:
Не понял, при чём тут cygwin?
Как это при чём? Без cygwin1.dll работать не будет. Это же линуховская утила.
Code:
Add=%PQA -r -J -o %AQA -path-list %LQA
Это что? Одна строка. А полную секцию сможешь выложить? Для кнопки, допустим, как это будет выглядеть? Сразу вопрос - у тебя работает?

#5:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 18:16
    —
Flasher wrote:
Как это при чём? Без cygwin1.dll работать не будет. Это же линуховская утила.

У меня валяется mkisofs.exe из какого-то дремучего nLite.
Quote:
Это что? Одна строка. А полную секцию сможешь выложить? Для кнопки, допустим, как это будет выглядеть? Сразу вопрос - у тебя работает?

Это строка упаковки для Мультиарка, ты ж плагин хотел Wink
Секцию тупо перекроил какую-то из имеющихся, оставил только упаковку. Параметры вообще не трогал.
Code:
[mkisofs]
Description="mkisofs - pack only"
Extension=iso
Archiver=%COMMANDER_PATH%\Plugins\WCX\MultiArc\mkisofs.exe
Add=%PQA -r -J -o %AQA -path-list %lQA
IgnoreErrors=0
Debug=0
UnixPath=0
SkipDirsInFileList=0
SkipEmptyNames=1
BatchUnpack=0
SearchForUglyDirs=1
AskMode=0
SkipLIST=1
AskHistory0=123

Аналогичные параметры для кнопки: "-r -J -o %Timage.iso -path-list %L"
Слепил чисто на пробу по примеру из вики. Файлы пакует без вопросов, каталоги не хочет. Надо, видимо, или версию поновей посмотреть, или справку почитать.

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

И кстати, есть же какой-то TotalISO 0.9.0.55.

#6:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 18:23
    —
Rodny wrote:
Файлы пакует без вопросов, каталоги не хочет.
Хм. А с кнопки не работает и со списком файлов, я разные версии раньше пробовал - и новые и постарше. Да, а назначить папку куда образ будет скидываться, можно? В Master Commander можно прямо в диалоге.
В общем, пока твоя уверенность в отсутствии проблем себя не оправдывает, так что...
За секцию спасибо, опробуем.

Rodny wrote:
И кстати, есть же какой-то TotalISO 0.9.0.55.
Стоял раньше. Какие-то с ним проблемы возникли. Да и он тоже только содержимое папки под курсором упаковывает, в таком виде мне плагин не нужен.

#7:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 18:49
    —
Пожалуйста, кнопка работает и с каталогами. А хотя не совсем, так содержимое выделенных каталогов добавляется, а сами выделенные исчезают. В общем, надо всё-таки справку mkisofs посмотреть Smile
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\WCX\MultiArc\mkisofs.exe
-o %Timage.iso -J -joliet-long %S
%COMMANDER_PATH%\TOTALCMD.EXE,3
mkisofs
%COMMANDER_PATH%\Plugins\WCX\MultiArc\

-1

Файл отсюда.
Quote:
а назначит папку куда образ будет скидываться, можно?
А почему нет? Постоянную после -o прописать, в процессе спрашивать через AskParam.

#8:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 18:59
    —
Rodny wrote:
Пожалуйста, кнопка работает и с каталогами.
%S - не вариант. Надо -path-list %L. %S будет паковать содержимое выделенных папок, а не сами папки.
Rodny wrote:
Постоянную после -o прописать, в процессе спрашивать через AskParam.
А на понятный язык можно перевести? Что за постоянная? Для -o имя прописывается вроде как, а не путь. Что значит спрашивать через AskParam?
Rodny wrote:
С учётом того, что я это сделал методом тыка, упорно игнорируя справку mkisofs, вполне оправдывает
Дело не в методе тыка, а в том, что названная мной фича в MC не работает как надо в указанных тобой примерах. А почитать можешь здесь.

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jun 20, 2011 19:03
    —
Я ещё хотел предложить AskParam, но думаю, не буду вмешиваться=) Задаёшь по кнопке запуск AskParam, которая предложит путь по умолчанию (например, путь в противоположной панели), при необходимости его можно будет подправить и нажать OK/Enter для запуска упаковки.

#10:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 19:36
    —
Flasher wrote:
Что за постоянная? Для -o имя прописывается вроде как, а не путь.

Постоянная папка, если для каких-то целей всегда в какую-то определённую сохраняешь. И никто же не мешает прописать полный путь вместо имени.

#11:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 19:53
    —
Rodny wrote:
Постоянная папка, если для каких-то целей всегда в какую-то определённую сохраняешь. И никто же не мешает прописать полный путь вместо имени.
В описании про путь ни слова. Ладно, посмотрю. Хотя уже понятно, что это всё не даст исходного результата.

#12:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 20:18
    —
Flasher
Справка кое-что прояснила. Смотри абзацы, начинающиеся с "pathspec является путем в дереве каталогов".
С опцией "-graft-points" строка с "-path-list %L" прекращает ругаться на каталоги и исправно добавляет их содержимое. Опять же, игнорируя сами каталоги. Но так оно и задумано.
mkisofs не предназначен для выполнения поставленной тобой задачи.

Возможным решением может быть обработка файла-списка в скрипте, и если текущий элемент является каталогом, то добавлять в командную строку параметров типа "каталог 1=каталог 1". Это если я правильно понял работу этой опции.

Или же нужно искать другое средство.

#13:  Author: Tol!kLocation: Арзамас PostPosted: Mon Jun 20, 2011 21:35
    —
Code:
@echo off &setlocal enableextensions &chcp 1251
rem Параметры: "%T%O.iso" "%L"

rem Начинаем строить командную строку: mkisofs -опции -o "результат.iso"
set "str=mkisofs.exe -r -J -graft-points -o "%~1""

rem Для каждой строки из списка вызываем процедуру
for /f "usebackq delims=" %%l in ("%~2") do call :x "%%l" "%%l."
rem Запускаем построенную командную строку
call %str%
rem Конец работы
goto :eof

rem Процедура
:x
set "i=%~1"
rem Меняем виндовые \ на юниксовые /
set "i=%i:\=/%"
rem Если строка кончается на / (т.е. указывает на папку)
if "%i:~-1%"=="/" (
rem Добавляем к командной строке "Имя папки=D:/Путь/Имя папки/"
set "str=%str% "%~n2=%i%""
rem Иначе добавляем к командной строке просто "D:/Путь/Имя файла.ехт"
) else (set "str=%str% "%i%"")
goto :eof

пробуйте
*проблемы с именами, содержащими & и )


Last edited by Tol!k on Tue Jun 21, 2011 19:23; edited 2 times in total

#14:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 21:53
    —
Tol!k
Работает

#15:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 22:02
    —
Rodny wrote:
С опцией "-graft-points" строка с "-path-list %L" прекращает ругаться на каталоги и исправно добавляет их содержимое.
Пробовал раньше c "-graft-points", не выходило.

Tol!k
Что-то не получается. mkisofs откуда брался?
Версия cygwin у меня 1.5.19.

#16:  Author: Tol!kLocation: Арзамас PostPosted: Mon Jun 20, 2011 22:04
    —
http://fy.chalmers.se/~appro/linux/DVD+RW/tools/win32/
работает без cygwin1.dll

#17:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 22:15
    —
Tol!k
Взял один exe-шник, кинул с батником в одну папку, прописал параметры, выделил, нажал - по нулям. Sad
Win7 x86.

#18:  Author: Tol!kLocation: Арзамас PostPosted: Mon Jun 20, 2011 22:26
    —
Ну, а сообщения какие пишет?
Quote:
Win7
Я не могу проверить

#19:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 22:46
    —
Tol!k wrote:
Ну, а сообщения какие пишет?
Сообщений никаких, в консоли, например.

#20:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 22:46
    —
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\WCX\MultiArc\mkisofs.cmd
"%T%O.iso" "%L"
C:\Windows\System32\imageres.dll,-68
mkisofs
%COMMANDER_PATH%\Plugins\WCX\MultiArc\

-1

Работает на Win7 x86

#21:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 22:48
    —
Rodny wrote:
Работает на Win7 x86
Значит у меня с системой что-то, не знаю. Кстати, в папку" MultiArc" зачем положил?

#22:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jun 20, 2011 22:52
    —
Flasher wrote:
Кстати, в папку" MultiArc" зачем положил?
Так я ж с него начинал эксперименты, там файл и остался.
У тебя после -o пробела нету, может здесь причина?.. Нет, так у меня тоже работает.

#23:  Author: FlasherLocation: Москва PostPosted: Mon Jun 20, 2011 22:58
    —
Rodny wrote:
Так я ж с него начинал эксперименты, там файл и остался.
Понятно.
Rodny wrote:
Нет, так у меня тоже работает.
Опередил. Батник-то я не трогал в этом смысле, а больше править и негде.
Там строка set "str=mkisofs.exe -r -J -graft-points -o"%~1"". Пробел, естественно, никуда не делся.

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

А, второе-то окно выдало:
Quote:
"mkisofs.exe" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.


Нашёл причину. По привычке путь запуска затёр. Very Happy

Tol'k, спасибо. Жаль, конечно, что там, где попадаются скобки, то не пакует. Было бы неплохо поправить, ведь это не проблема программы.
А можешь расписать алгоритм? Попробую в скрипте воплотить.

#24:  Author: Tol!kLocation: Арзамас PostPosted: Tue Jun 21, 2011 19:18
    —
Прокомментировал

#25:  Author: FlasherLocation: Москва PostPosted: Tue Jun 21, 2011 19:47
    —
Tol!k
Можно разжевать?:
Quote:
Добавляем к командной строке "Имя папки=D:/Путь/Имя папки/"
Что это даёт?

#26:  Author: Tol!kLocation: Арзамас PostPosted: Tue Jun 21, 2011 20:03
    —
Дык
Rodny wrote:
Возможным решением может быть обработка файла-списка в скрипте, и если текущий элемент является каталогом, то добавлять в командную строку параметров типа "каталог 1=каталог 1".

Иначе добавляется не папка, а её содержимое

#27:  Author: FlasherLocation: Москва PostPosted: Tue Jun 21, 2011 20:07
    —
И что, прям в комстроке так и прописывать со знаком равенства? Я что-то ничего подобного не находил в мануале.

#28:  Author: Tol!kLocation: Арзамас PostPosted: Tue Jun 21, 2011 20:19
    —
Ну да

Кстати, в батнике ошибка. Должно быть set "str=%str% "%~nx2=%i%""

#29:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Tue Jun 21, 2011 20:45
    —
Flasher wrote:
И что, прям в комстроке так и прописывать со знаком равенства? Я что-то ничего подобного не находил в мануале.

Rodny wrote:
Смотри абзацы, начинающиеся с "pathspec является путем в дереве каталогов"

до "mkisofs может быть запущено на системах Win9X/NT4" Wink

#30:  Author: FlasherLocation: Москва PostPosted: Thu Jun 23, 2011 00:38
    —
Сделал вчера (т.е. уже позавчера), а выложить забыл... Smile
Code:
' Упаковать выделенные файлы и папки в ISO-образ
' vbs-файл положить в одну папку с mkisofs.exe
' Параметры: %L "<Путь_назначения>\"
' Пример: %L "%T"
'=============================================
Name = InputBox("Введите имя ISO-файла:", "Создание образа ISO из выделенного списка")

If Len(Name) = 0 Then WScript.Quit
On Error Resume Next
With CreateObject("Scripting.FileSystemObject")
  For Each F In Split(.OpenTextFile(WScript.Arguments(0), 1).ReadAll, vbNewLine)
    If .FolderExists(F) Then Str = Str & " """ & .GetFolder(F).Name & """=""" & F & """"
    If .FileExists(F) And Len(.GetFileName(F))<=103 Then Str = Str & " """ & F & """"
    If .FileExists(F) And Len(.GetFileName(F))>103 Then Str = Str & " """ & Left(.GetBaseName(F), Len(.GetBaseName(F))+103-Len(.GetFileName(F))) & "." & .GetExtensionName(F) & """=""" & F & """"
  Next
End With
Str = Replace("""" & Wscript.Arguments(1) & Name & ".iso"" " & Str, "\", "/")
With CreateObject("WScript.Shell")
  .Run "mkisofs.exe -quiet -r -f -joliet-long -nobak -graft-points -o " & Str, 0, True
  .Popup "Образ создан!", 1, "Результат", 64
End With

Нет проблем с символами и точками в названиях.

Нужно также иметь в виду, что у формата записи Joliet допустимая длина в именах составляет 64 символа, поэтому файлы, которые этому не удовлетворяют по логике должны сохраняться с обрезанным именем, включая расширение. Я этот момент поправил, теперь обрезается только имя без расширения.

Tol!k, спасибо, что расписал, а то пришлось бы время лишнее тратить на расшифровку.
Rodny, потом сам увидел, спасибо за повторный тык.


Last edited by Flasher on Wed Jul 20, 2011 02:20; edited 3 times in total

#31:  Author: BezDNaU PostPosted: Fri Jun 24, 2011 10:51
    —
Можно с помощью ImgBurn.
Вот кнопка

Code:
TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\Utils\ImgBurn\ImgBurn.exe"
/MODE BUILD /FILESYSTEM "ISO9660 + Joliet" /BUILDMODE IMAGEFILE /VOLUMELABEL "ObRaZ" /VERIFY /NOSAVESETTINGS /SRCLIST "%L" /DEST "%Tdisk.iso" /START /CLOSESUCCESS
%COMMANDER_PATH%\Utils\ImgBurn\ImgBurn.exe,1
Записать выделенное
%COMMANDER_PATH%\Utils\ImgBurn\

-1

#32:  Author: FlasherLocation: Москва PostPosted: Fri Jun 24, 2011 11:36
    —
Пусть, конечно, ещё один вариант будет, но в 10 раз превышающий установочный дистрибутив против маленькой портабельной консольной однофайловой тулзы, в которой и скорость записи куда побыстрее и нет лишних громоздких окон, окна подтверждения и можно вводить имя нового образа (скрипт), а не лезть в параметры кнопки, как-то не катит.
Тут, кстати, ещё пару ключей не помешало бы: /PORTABLE /LANGID 2057
Но есть один у неё небольшой плюс - можно записывать в UDF.

#33:  Author: FlasherLocation: Москва PostPosted: Fri Jun 24, 2011 16:38
    —
Кстати, был ещё пример для UltraISO.

Сделал некоторые правки в скрипте по совету Batya. Также сделал грамотную обрезку длинных имён файлов.

#34:  Author: FlasherLocation: Москва PostPosted: Wed Jul 20, 2011 02:21
    —
Увеличил до 103 символов, в подавляющем большинстве случаев должно хватать.

#35:  Author: FlasherLocation: Москва PostPosted: Sun Aug 11, 2013 21:04
    —
Предлагаемый вариант:
Code:
'================================================================================================
' Создать для каждого выбранного каталога свой ISO-образ (файловая система: UDF)
' Параметры: %WL "<путь получателя>" <мин. остаток свободного места на диске в Мб после упаковки>
' Пример:    %WL "%T" 250
'===================================== Путь к утилите OSCDIMG ===================================
Util = """%COMMANDER_PATH%\Utils\ISO\oscdimg.exe"""
'================================================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : Path = .Item(1) : Min = .Item(2)
End With
If Right(Path, 1) <> "\" Then Path = Path & "\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Drive = FSO.GetDriveName(Path) : Free = FSO.GetDrive(Drive).AvailableSpace
L = vbNewLine : Set Dict = CreateObject("Scripting.Dictionary")
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If F <> "" Then
    If FSO.FolderExists(F) Then Size = Size + FSO.GetFolder(F).Size : Dict.Add F, "" : End If
  End If
Next : Res = Abs((Size - Free)/1024) : Title = "Создание ISO-образов"
If Size > Free Then
  If Res > 1023 Then Res = Fix(Res/1024) & " Мб" Else Res = Fix(Res) & " Кб"
  WSH.Popup "Требуется дополнительно " & Res & " свободного места на диске " &_
  Drive & " !", 4, Space(30) & "Остановка (""" & Title & """)", 48 : Quit
ElseIf Res/1024 < Min Then
  Mess = MsgBox("После создания образов на диске останется" & L & "чуть менее " &_
  Int(Res/1024) & " Мб !" & L & L & "Всё равно продолжить?", 4132, Space(24) & Title)
  If Mess <> 6 Then Quit
End If
For Each F in Dict.Keys
  WSH.Run Util & " -h -u2efv -x -o -k -m """ & Left(F, Len(F) - 1) &_
  """ """ & Path & FSO.GetBaseName(F) & ".iso""", 0, True
Next : WSH.Popup "Образы созданы!", 4, "     " & Title, 64 : Quit
Sub Quit : Set FSO = Nothing : Set WSH = Nothing : Set Dict = Nothing : WScript.Quit : End Sub
OSDIMG

#36:  Author: addhaloka PostPosted: Sun Jul 16, 2017 23:49
    —
Flasher wrote:
Сделал некоторые правки в скрипте по совету Batya. Также сделал грамотную обрезку длинных имён файлов.

Что-то то работает, то нет.
 Hidden text

#37:  Author: FlasherLocation: Москва PostPosted: Sun Jul 16, 2017 23:58
    —
addhaloka
См. на TCKB ссылку.

#38:  Author: addhaloka PostPosted: Mon Jul 17, 2017 00:31
    —
Flasher
Спасибо, с mkisofs оттуда нормально работает и скрипт там поновей. Smile

p.s. Те mkisofs 3.x, что у меня были, похоже совсем кривые - помимо неработы с папками, там ещё и с кириллицей проблемы.

#39:  Author: bbcby PostPosted: Thu May 17, 2018 16:53
    —
Добрый день. Создание ISO DVD-Video через oscdimg.
Тут был скрипт vbs, конечно, но мне хотелось бы видеть окно консоли с процессом выполнения.
Надо выделенные папки, каждая в свою ISO в противоположную панель. Volume label должна браться из имени папки, названия папок могут быть с пробелами.
Пытаюсь сделать кнопку, но что не получается. Создается файл с именем .iso и метка тома прописывается неверно.
Code:
TOTALCMD#BAR#DATA
%ComSpec% /k echo off & for /f "delims=" %i in
('type %WF') do oscdimg -l%%~n -uv -u1 %%i %T%%~ni.iso
shell32.dll,151
DVD Video


-1

Нужен формат ISO именно DVD-Video, параметров -uv -u1 вроде достаточно?

#40:  Author: FlasherLocation: Москва PostPosted: Thu May 17, 2018 16:56
    —
bbcby wrote:
Тут был скрипт vbs, конечно, но мне хотелось бы видеть окно консоли с процессом выполнения.
Он не был, он есть. Выше перед глазами. 3 строка снизу — 0 заменить на 1.

#41:  Author: bbcby PostPosted: Thu May 17, 2018 17:27
    —
Оказалось все просто, спасибо.
А можно вариант без проверки свободного места.
И метка тома там DVD-ROM прописывается, а не берется из имени папки.

#42:  Author: FlasherLocation: Москва PostPosted: Thu May 17, 2018 18:05
    —
А смысл варианта без проверки? Это же весьма полезная опция. И можно хоть 0 написать, если угодно.

По метке 4 строка снизу:
Quote:
WSH.Run Util & " -h -u2efv -x -o -k -l""" & FSO.GetFileName(F) & """ -m """ & Left(F, Len(F) - 1) &_

#43:  Author: bbcby PostPosted: Thu May 17, 2018 18:57
    —
Спасибо.

#44:  Author: LonerDLocation: Донецк PostPosted: Wed Dec 05, 2018 17:36
    —
Цель - упаковать выделенные файлы и каталоги (в том числе с именами в Unicode) в единый ISO-файл.
С этим может справиться какая-нибудь маленькая консольная бесплатная утилитка или минимальный вариант - ImgBurn?
Что-то ничего более действенного не находится... даже такая бы казалось "эталонная" утилита для работы с ISO-файлами как UltraISO - и та не переваривает Unicode.

#45:  Author: FlasherLocation: Москва PostPosted: Wed Dec 05, 2018 23:53
    —
LonerD
Вообще mkisofs с параметрами -r -joliet должна работать с Unicode. Почему это не происходит с версией с TCKB, ответить затрудняюсь. Попробуй другие версии.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group