
У меня есть многокомпонентный rar-архив размером 80 ГБ, распакованный. У меня 5 ГБ свободного места, а каждая часть rar-архива занимает 2 ГБ.
Мне нужно извлечь одну часть, удалить ее, извлечь следующую и так далее, чтобы в процессе извлечения использовать еще максимум 5 ГБ и не исчерпать все дисковое пространство.
решение1
ВАЖНЫЙ:
- этот сценарийВОЛЯудалять извлеченные части независимо от конечного результата, поэтому если процесс остановится из-за отсутствующей или поврежденной части, вы не сможете начать заново
- Откройте блокнот, вставьте следующий код и сохраните его как_unrar.vbsв той же папке, где находятся ваши rar-файлы.
- НаборUnRAR_Full_Path,Первая частьиЦелевая_папка, обязательно сохраните кавычки.
Сценарий:
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
Вариант первый:Тихий
запустить_unrar.vbsфайл, дважды щелкнув по нему
Вариант второй:рекомендуемые
удалить'с самого начала
'WScript.Echo (strLine)
'WScript.Echo ("Deleting: " & mf_filetodel)
откройте cmd, перейдите в свою папку и введите"cscript _unrar.vbs"
- с использованиемWScript.Эхобезcscriptбудет выдавать слишком много раздражающих сообщений
этот скрипт работает, считывая стандартный вывод UnRAR.exe.
РЕДАКТИРОВАТЬ
Улучшен скрипт для автоматической работы с любой структурой имени и с любым количеством частей до 9999 частей, а также для работы с устаревшими архивами, не содержащими начальных нулей.