Total Commander Knowledge Base

Есть вопрос?

Поищите ответ в самой большой русскоязычной базе знаний по Total Commander!

Создание ISO-образов из выбранного

Q: Периодически требуется из выбранных в панели элементов создавать образы для последующей записи
на CD/DVD/Blue-Ray-диски или для возможности их подключения в качестве виртуальных дисков.
A: Представляю vbs-скрипт с использованием утилиты mkisofs:
'==================================================
' Упаковать выбранные папки и/или файлы в ISO-образ

' Параметры: %WL "<Путь_назначения>\"
' Пример:    %WL "%T"

' Автор - Flasher ©
'================= Путь к утилите =================
Util = """%COMMANDER_PATH%\Utils\ISO\mkisofs.exe"""
'==================================================

Name = InputBox(String(5, vbLf) & "Введите имя ISO-файла:",_
       "         Создание образа ISO из выделенного списка")
If Len(Name) = 0 Then WScript.Quit
With CreateObject("Scripting.FileSystemObject")
  Set List = .OpenTextFile(WScript.Arguments(0),,,-1)
    Do Until List.AtEndOfStream
      F = Trim(List.ReadLine)
      If F <> "" Then
        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 & """"
      End If
    Loop
End With : Str = Replace("""" & Wscript.Arguments(1) & Name & ".iso"" " & Str, "\", "/")
With CreateObject("WScript.Shell")
  .Run Util & " -quiet -r -l -f -joliet-long -udf -nobak -graft-points -o " & Str, 0, True
  .Popup "Образ создан!", 1.4, Space(14) & "Результат", 64
End With

A: Другое удобное решение связано с созданием образов для содержимого
каждого выбранного каталога с использование утилиты OSDIMG:
'================================================================================================ 
' Создать для каждого выбранного каталога свой ISO-образ (файловая система: UDF) 
' Параметры: %WL "<путь получателя>" <мин. остаток свободного места на диске в Мб после упаковки> 
' Пример:    %WL "%T" 250 

' Автор - Flasher ©
'===================================== Путь к утилите 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

Flasher
13.12.2014