Войти

Показать полную графическую версию : Редактирование архива


Gisender
25-01-2015, 21:01
Можно ли через cmd открыть zip архив (не через винрар,встроенным архиватором в windows) зайти в определенную папку в этом архиве и заменить в этой папке файл

Iska
25-01-2015, 21:14
Нет, нельзя. «Встроенного архиватора в Windows» не существует. Есть механизм ограниченной поддержки архивов ZIP, интегрированный в Проводник посредством отдельной библиотеки. Используйте командную строку 7-zip, RAR/WinRAR и т.п.

Gisender
25-01-2015, 21:35
Хорошо а нельзя ли с помощь. этой встроенной библиотеки создать архив?

Iska
26-01-2015, 03:27
Худо-бедно можно посредством клиентов Automation — таких, как WSH/PowerShell, например. Но проще взять 7-Zip.

Gisender
26-01-2015, 11:17
Не подскажите такой скрипт ?
Редактирование архива или создание из имеющихся файлов,все это нужно что бы в одном из файлов изменить дату и время на нынешнее,а сам файл нужен в архиве в конечном итоге

Iska
26-01-2015, 11:54
Не подскажите такой скрипт ? »
vbscript create zip file - Поиск в Google (https://www.google.com/search?q=vbscript+create+zip+file)

Foreigner
26-01-2015, 12:08
Gisender, С помощью PowersHell, Net-Framework должен быть не ниже 4.5-версии, посмотреть из PowerShell можно так:

(gp "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client").version

Сам zip:

add-type -assembly system.io.compression.filesystem


# Создаем папку для распаковки
new-item -t dir "D:\ZIP"

# Распаковываем
[io.compression.zipfile]::extracttodirectory("C:\Folder\test.zip","D:\ZIP")

# Редактируем файл в D:\ZIP

# Запаковываем
[io.compression.zipfile]::createfromdirectory("D:\ZIP","D:\test.zip")

# Перезаписываем исходный test.zip
move "D:\test.zip" "C:\Folder" -force

# Удаляем D:\ZIP
remove-item "D:\ZIP" -recurse -force

Gisender
26-01-2015, 13:17
С помощью PowersHell, Net-Framework должен быть не ниже 4.5-версии, посмотреть из PowerShell можно так: »
А вариантов без установки Net-Framework не найдется?

Iska
26-01-2015, 13:24
А вариантов без установки Net-Framework не найдется? »
Gisender, см. п. #6.

iccup.platoon@vk
26-01-2015, 20:42
Если прямо-таки всё у вас "определенное", то можете описать всё более подробно?
1) Название zip-файла
2) Путь к папке в zip-файле
3) Путь к тому самому файлу, который нужно заменить
4) Путь к файлу, которым будем заменять
И тогда я смогу Вам помочь.

Gisender
27-01-2015, 11:08
Если прямо-таки всё у вас "определенное", то можете описать всё более подробно?
1) Название zip-файла
2) Путь к папке в zip-файле
3) Путь к тому самому файлу, который нужно заменить
4) Путь к файлу, которым будем заменять
И тогда я смогу Вам помочь. »


1) jetpack.zip
2) Путь: в главной директории архива лежит папка с названием resources в ней лежит папка с названием firefox,а в ней лежит папка с названием data и уже в этой папке лежит файл с названием data.js который нужно заменить
3)Файл котором будем заменять это такой же data.js по пути %appdata%/data.js

iccup.platoon@vk
28-01-2015, 14:19
Set ShellApp = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const OverwriteExisting = True
Set objDestFolder = ShellApp.NameSpace("F:\SANDBOX\work") ' куда распаковать
Set objSrcFolder = ShellApp.NameSpace("F:\SANDBOX\jetpack.zip") ' что распаковать
objDestFolder.CopyHere objSrcFolder.Items ' распаковка архива
sSourceFolder = "F:\SANDBOX\work" ' путь, где лежит ТОЛЬКО одна лишь распакованная папка
sTargetZIPFile = "F:\SANDBOX\jetpack.zip" ' имя будущего архива
sFile = "F:\SANDBOX\data.js" ' файлик, которым будем заменять
sPath = "F:\SANDBOX\work\resources\firefox\data\" ' Путь для копирования файлика
objFSO.DeleteFile("F:\SANDBOX\work\resources\firefox\data\data.js") ' Удаляем старый
objFSO.CopyFile sFile , sPath, OverwriteExisting ' Копируем новый
' Здесь упаковывается новый архив, работает на магии '
Dim oShellApp, oFSO, iErr, sErrSource, sErrDescription
Set oShellApp = CreateObject("Shell.Application")
Set oFSO = CreateObject("Scripting.FileSystemObject")
If Right(sSourceFolder,1) <> "\" Then sSourceFolder = sSourceFolder & "\"
On Error Resume Next
If oFSO.FileExists(sTargetZIPFile) Then oFSO.DeleteFile sTargetZIPFile,True
iErr = Err.Number
On Error Resume Next
oFSO.OpenTextFile(sTargetZIPFile, 2, True).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
iErr = Err.Number
On Error Resume Next
oShellApp.NameSpace(sTargetZIPFile).CopyHere oShellApp.NameSpace(sSourceFolder).Items
iErr = Err.Number
Do Until oShellApp.NameSpace(sTargetZIPFile).Items.Count = oShellApp.NameSpace(sSourceFolder).Items.Count
WScript.Sleep 500
Loop
' Конец магической упаковки '

Мне самому страшно =) Редактируете под себя и сохраняете этот код в файл SkriptName.vbs
Iska, не бей за такой код =)




© OSzone.net 2001-2012