Войти

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


ryok
10-11-2021, 14:08
Приветствую, был составлен такой код на основе примеров которые нашел в сети.


$xpuiBundlePath = "C:\Users\Ps1\Desktop\123\xpui.spa"

Add-Type -Assembly 'System.IO.Compression.FileSystem'

$zip = [System.IO.Compression.ZipFile]::Open($xpuiBundlePath, 'update')
$entry = $zip.GetEntry('xpui.js')


# Extract xpui.js from zip to memory
$reader = New-Object System.IO.StreamReader($entry.Open())
$xpuiContents = $reader.ReadToEnd()
$reader.Close()


# Replace ".ads.leaderboard.isEnabled" + separator - '}' or ')'
# With ".ads.leaderboard.isEnabled&&false" + separator
$xpuiContents = $xpuiContents -replace '(\.ads\.leaderboard\.isEnabled)(}|\))', '$1&&false$2'

# Delete ".createElement(XX,{onClick:X,className:XX.X.UpgradeButton}),X()"
$xpuiContents = $xpuiContents -replace '\.createElement\([^.,{]+,{onClick:[^.,]+,className:[^.]+\.[^.]+\.UpgradeButton}\),[^.(]+\(\)', ''


# Rewrite it to the zip
$writer = New-Object System.IO.StreamWriter($entry.Open())
$writer.BaseStream.SetLength(0)
$writer.Write($xpuiContents)
$writer.Close()

$zip.Dispose()



Вкратце происходит следующее:
- Открываем архив xpui.spa
- в памяти редактируем файл xpui.js из этого архива.
- измененный файл xpui.js закидываем обратно в тот же архив, заменяя старый вариант файла.

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

Sham
10-11-2021, 16:49
итерация по свойству Entries (https://docs.microsoft.com/en-us/dotnet/api/system.io.compression.ziparchive.entries?view=net-5.0) или в пайп фильтру какому-нибудь $zip.Entries | where FullName -like '*.txt' | foreach {
$reader = New-Object System.IO.StreamReader($_.Open())
...
$writer.Close()
}

DJ Mogarych
10-11-2021, 17:50
Не проще распаковать архив, обработать что нужно, а потом запаковать обратно?

ryok
10-11-2021, 20:39
Sham, Как же это было просто, благодарю.

DJ Mogarych, Мне проще обновить это в архиве, чем их распаковывать и удалять, так же скрипт этот часто используется, а по ресурсам я так понимаю этот вариант немного экономичнее.




© OSzone.net 2001-2012