Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Редактирование архива (http://forum.oszone.net/showthread.php?t=294457)

Gisender 25-01-2015 21:01 2461238

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

Iska 25-01-2015 21:14 2461244

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

Gisender 25-01-2015 21:35 2461259

Хорошо а нельзя ли с помощь. этой встроенной библиотеки создать архив?

Iska 26-01-2015 03:27 2461368

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

Gisender 26-01-2015 11:17 2461455

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

Iska 26-01-2015 11:54 2461470

Цитата:

Цитата Gisender
Не подскажите такой скрипт ? »

vbscript create zip file - Поиск в Google

Foreigner 26-01-2015 12:08 2461477

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 2461517

Цитата:

Цитата Foreigner
С помощью PowersHell, Net-Framework должен быть не ниже 4.5-версии, посмотреть из PowerShell можно так: »

А вариантов без установки Net-Framework не найдется?

Iska 26-01-2015 13:24 2461521

Цитата:

Цитата Gisender
А вариантов без установки Net-Framework не найдется? »

Gisender, см. п. #6.

iccup.platoon@vk 26-01-2015 20:42 2461796

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

Gisender 27-01-2015 11:08 2462004

Цитата:

Цитата iccup.platoon@vk
Если прямо-таки всё у вас "определенное", то можете описать всё более подробно?
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 2462635

Код:

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, не бей за такой код =)


Время: 22:20.

Время: 22:20.
© OSzone.net 2001-