Компьютерный форум 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=350004)

ryok 10-11-2021 14:08 2971415

Редактировать файлы прямо в архиве по маске
 
Приветствую, был составлен такой код на основе примеров которые нашел в сети.

PHP код:

$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 2971443

итерация по свойству Entries или в пайп фильтру какому-нибудь
Код:

$zip.Entries | where FullName -like '*.txt' | foreach {
    $reader = New-Object System.IO.StreamReader($_.Open())
    ...
    $writer.Close()
}


DJ Mogarych 10-11-2021 17:50 2971446

Не проще распаковать архив, обработать что нужно, а потом запаковать обратно?

ryok 10-11-2021 20:39 2971470

Sham, Как же это было просто, благодарю.

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


Время: 02:35.

Время: 02:35.
© OSzone.net 2001-