Extrai rar multipart, excluindo partes à medida que são extraídas

1

Eu tenho um rar multipart de 80GB descompactado. Eu tenho 5GB de espaço livre, e cada parte do arquivo rar é de 2GB.

O que estou procurando é extrair uma parte, excluí-la, extrair a próxima e assim por diante, para usar no máximo mais 5 GB no processo de extração e não esgotar todo o meu espaço em disco.

    
por m fran 26.01.2016 / 17:49

1 resposta

2

IMPORTANTE:

  • esse script WILL excluirá as partes feitas, independentemente do resultado final, por isso, se o processo parar para uma parte ausente ou corrompida, você não poderá recomeçar
  • Abra o bloco de notas e cole o código a seguir e salve-o como _unrar.vbs na mesma pasta com seus arquivos rar.
  • Defina UnRAR_Full_Path , First_Part e Target_Folder , certifique-se de manter as aspas.

O script:

UnRAR_Full_Path = "c:\program files\winrar\unrar.exe"
First_Part = "YourArchiveName.part001.rar"
Target_Folder = "ExtractedFiles\"

mf_command = AddQuotes(UnRAR_Full_Path) & " x " & AddQuotes(First_Part) & " " & AddQuotes(Target_Folder)
mf_LZerosSplit = Split(First_Part, ".")
mf_LZerosPart = Mid(mf_LZerosSplit(UBound(mf_LZerosSplit)-1), 5)
If UBound(mf_LZerosSplit) > 3 Then
    WScript.Echo ("Too Lazy to deal with names the contains dots, only 2 are allowed. one before 'part' and one before 'rar'")
    WScript.Quit 1
End If
mf_LZ_UnderTen = ""
mf_LZ_UnderHundred = ""
mf_LZ_UnderThousand = ""

If Len(mf_LZerosPart) = 2 Then
    mf_LZ_UnderTen = "0"

ElseIf Len(mf_LZerosPart) = 3 Then
    mf_LZ_UnderTen = "00"
    mf_LZ_UnderHundred = "0"

ElseIf Len(mf_LZerosPart) = 4 Then
    mf_LZ_UnderTen = "000"
    mf_LZ_UnderHundred = "00"
    mf_LZ_UnderThousand = "0"
End If 
Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec(mf_command)
Set objStdOut = objWshScriptExec.StdOut

While Not objStdOut.AtEndOfStream
    strLine = objStdOut.ReadLine

    'WScript.Echo (strLine)

        If InStr(strLine,"Extracting from") Then
            mf_filename = Mid(strLine, 17)
            mf_partnameSplit = Split(mf_filename, ".")
            mf_partname = mf_partnameSplit(1)
            mf_partnumber = Mid(mf_partname , 5)
            If mf_partnumber > 1 Then
                mf_numtodel = mf_partnumber-1
                mf_LeadingZeros = ""
                If mf_numtodel < 10 Then
                    mf_LeadingZeros = mf_LZ_UnderTen
                ElseIf mf_numtodel < 100  Then
                    mf_LeadingZeros = mf_LZ_UnderHundred
                ElseIf mf_numtodel < 1000  Then
                    mf_LeadingZeros = mf_LZ_UnderThousand
                End If
                mf_filetodel = mf_partnameSplit(0) & ".part" & mf_LeadingZeros & mf_numtodel & ".rar"

                'WScript.Echo ("NOW DELETING: " & mf_filetodel)

                Set obj = CreateObject("Scripting.FileSystemObject")
                obj.DeleteFile(mf_filetodel)
            End If
        ElseIf InStr(strLine,"All OK") Then
            WScript.Echo ("looks like All Ok, Delete the Last part and Have a nice day :)")
        End If
Wend

Function AddQuotes(strInput)
    AddQuotes = Chr(34) & strInput & Chr(34)
End Function

Opção 1: Silenciosa

execute o arquivo _unrar.vbs clicando duas vezes nele

Opção 2: recomendado

remova o ' do início de

'WScript.Echo (strLine)

'WScript.Echo ("Deleting: " & mf_filetodel)

abra o cmd, direcione para sua pasta e digite "cscript _unrar.vbs"

  • usando o WScript.Echo sem o cscript exibirá muitas caixas de mensagens irritantes

este script funciona lendo o Stdout do UnRAR.exe.

EDITAR

Melhorou o script para trabalhar automaticamente com qualquer estrutura de nomes e com qualquer número de partes até 9999 partes. e para trabalhar com arquivos herdados que não contenham zeros à esquerda.

    
por 27.01.2016 / 01:16