Показать полную графическую версию : открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения
v79italya
17-08-2019, 19:08
Приветствую. как можно JS-скриптом или Batом открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения?
на скринах показаны шаги. архив открывается двумя шагами. сначала ПКМ -> 7-Zip -> Открыть архив. затем ПКМ -> Просмотр. нажав Просмотр, жду около минуты(это, наверное, надо учесть, поставив как то паузу) открытие файла. когда файл откроется, нажимаю Правка -> Найти.. ищу </xyzID> . все вместе <xyzID>3</xyzID> . только вместо тройки может быть любое число одно-трехзначное. и вот вместо 3(или другого числа) надо поставить 27. причем, когда набираю 27, то опять нужно около минуты ждать(опять надо учесть). потом закрываю файл с сохранением изменений и обновлением файла в архиве. возможно ли это все делать на автомате?
адрес файла и имя файла, наверное, лучше в скрипте указать. сейчас так: C:\red\xyz.iwprj2
сейчас в файле текст укорочен. поэтому будет быстро сохраняться изменения. на самом деле надо около минуты-полторы.
v79italya, можно, но совсем не так, как Вы себе это представляете.
Исходные данные:
Знаем точное местоположение файла архива.
Знаем точное местоположение искомого файла в архиве.
Знаем, что потребно искать.
Знаем, какой архиватор будем пользовать, и предполагаем, что он может быть установлен по стандартному месторасположению.
Процесс:
Проверяем существование файла архива.
Проверяем существование архиватора.
Проверяем существование искомого файла в архиве.
Извлекаем искомый файл из архива во временный каталог.
Читаем содержимое искомого файла, осуществляем поиск и замену.
Если поиск был успешен — сохраняем новое содержимое в искомый файл, помещаем искомый файл в архив с заменой, удаляем временный каталог с файлом.
Поместите в gzip-архив весь искомый файл целиком.
greg zakharov
17-08-2019, 20:51
Iska, все это второстепенные категории, да и пункты с четвертого по шестой уж больно притянуты за уши в случае с 7zip. Объясню почему. У данного архиватора предусмотрена возможность вывода в поток (ровно как и чтение из потока). Используя sed в качестве потокового редактора, можно запросто редактировать, скажем, текстовые файлы в архиве без извлечения во временную папку. Представьте, есть у нас некоторый текстовый файл some.txt:
regular string
obsolete
regular string
Жмем его, скажем в zip:
7za a -mx9 test.zip some.txt
Теперь представим, что в только что пожатом текстовом файле нужно obsolete заменить на new string. Как мы поступаем:
7za x test.zip -so | sed "s/obsolete/new string/Ig" | 7za u test.zip -si
7za d test.zip some.txt
7za rn test.zip test some.txt
Это, конечно, всего лишь схематичный порядок действий, чтобы был ясен сам принцип. Доработать пример напильником можно углубившись в справку 7zip.
v79italya
18-08-2019, 06:51
1. Знаем
2. Знаем
3. Знаем
4. Знаем »
так я уже написал:
1 - C:\red\ или C:\red\xyz.iwprj2
2 - он там один xyz
3 - xyzID>3</xyzID> , но вместо тройки может быть любое число
4 - C:\Program Files\7-Zip\7z.exe
попробуйте распаковать архив на диск С: . на скринах показано как я делаю это вручную. и хотелось бы также программно.
greg zakharov, а нельзя ли готовое решение?
greg zakharov, это всё, конечно, интересно, но имеет достаточно ограниченную область применения. Как там с кодировками, BOM, концами строк, а?
попробуйте распаковать архив на диск С: . »
Попробуйте выложить архив с полным содержимым xml-файла xyz.
на скринах показано как я делаю это вручную. и хотелось бы также программно. »
Я уже написал, что «так же» программно не получится. Как — тоже написал. Другой вариант предложил коллега greg zakharov.
greg zakharov, 7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся. Да и sed я бы не стал советовать - стороннее ПО, да и "вещь в себе" - лучше на PoSh сварганить замену.
Процесс:
Проверяем существование файла архива.
Проверяем существование архиватора.
Проверяем существование искомого файла в архиве. »
Таких пунктов можно бесконечное число навертеть.
Если их убрать ничего не изменится - о проблеме ОС/интерпретатор сообщит, а "результат" будет тот же.
7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся. »
Поясните?!
Если их убрать ничего не изменится - о проблеме ОС/интерпретатор сообщит, а "результат" будет тот же. »
Можно, конечно, и так. Но лучше заранее обрабатывать такие ситуации.
v79italya
18-08-2019, 15:04
архив с полным содержимым xml-файла »
написал Вам в личку.
а там:
Iska превысил(а) максимальный объем сохраненных персональных сообщений и не может получать новые сообщения, пока не удалит часть старых.
написал Вам в личку. »
Там что-то секретное, что ли, и Вы не хотите сие «светить»? Ну, пришлите на почту.
v79italya
18-08-2019, 15:29
Iska, и со второго раза не получилось отправить в личку, а на маил не предусмотрено прикрепление файл.
в принципе то же самое, только текста больше. можно и обойтись
а на маил не предусмотрено прикрепление файл. »
Отправьте тестовое письмо с адресом, я Вам отвечу, затем Вы сможете написать напрямую. Сам я не могу Вам отправить письмо по причине:
Извините, этот пользователь отключил прием E-mail.
v79italya
18-08-2019, 15:48
не получается отправить тестовое письмо. да и не надо наверное.
смотрите, в теме часть файла изменена. если бы не изменил. то тема была бы с нарушением правил.
давайте использовать файл из темы. дальше я сам подгоню решение. если смогу конешно
не получается отправить тестовое письмо. »
Мне уже две штуки пришло, и я Вам на них ответил.
давайте использовать файл из темы. »
Тогда без меня. Я предпочитаю работать с xml-файлом, как с xml-файлом, а не с его огрызком.
v79italya
18-08-2019, 16:05
Iska, отправил оригинал
Цитата Busla:
7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся. »
Поясните?! »
алгоритм разработан так что получает поток и отдаёт поток - последовательность данных в один проход
для них возможно выдавать в stdout
If the -so switch is used with the command that creates archive, it works only with some archive formats: xz, gzip, bzip2 and tar.
Если их убрать ничего не изменится - о проблеме ОС/интерпретатор сообщит, а "результат" будет тот же. »
Можно, конечно, и так. Но лучше заранее обрабатывать такие ситуации. »
"обработать ситуацию" - это если не нашёлся 7zip, поискать WinRar
а ваша обработка в стиле вместо ошибки (с ошибочным кодом возврата) написать красный текст с нормальным кодом завершения - это медвежья услуга
greg zakharov
18-08-2019, 18:27
Как там с кодировками, BOM, концами строк, а?
Нормально. А должно быть иначе?
7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся.
Очередной бред? Или вдруг из исходников собрался какой-то специфический 7zip? Для начала бы просто проверили -so и -si на практике.
Да и sed я бы не стал советовать - стороннее ПО, да и "вещь в себе" - лучше на PoSh сварганить замену.
Ага... А 7zip не стороннее ПО? На pwsh можно много чего сделать. Однако в вашем случае это обычное пустословие, ибо, во-первых, вы бы привели рабочий код, во-вторых, случись RAR формат вы бы наверняка использовали сторонние библиотеки. Или вы желаете заложиться на почку, что можете на pwsh реализовать алгоритм сжатия RAR?
С sed'ом работает и bom-метку сохраняет, но через временный файл только
7z x -tgzip xyz.iwprj2 -so | sed "s/\(<xyzID>\)[0-9]\{1,\}\(<\/xyzID>\)/\127\2/ig" >tempfile.tmp & 7z u -tgzip xyz.iwprj2 -sixyz <tempfile.tmp & del /f tempfile.tmp
Очередной бред? Или вдруг из исходников собрался какой-то специфический 7zip? Для начала бы просто проверили -so и -si на практике. »
бред - это проверять на практике то, что по инструкции работать не должно
даже если в вашем случае это сработало - это называется deprecated - не нужно ориентироваться на такое поведение, чтобы потом не было больно
greg zakharov
19-08-2019, 00:08
бред - это проверять на практике то, что по инструкции работать не должно
даже если в вашем случае это сработало - это называется deprecated - не нужно ориентироваться на такое поведение, чтобы потом не было больно
Бред нарастает. Где в манах 7zip написано что это устаревшая фича? То у вас sed чуть ли не от лукавого, то попытки оправдать свой бред...
Бред нарастает. Где в манах 7zip написано что это устаревшая фича? »
"Сама придумала, сама обиделась"
где я писал про устаревшую фичу? :o
Я привёл конкретную цитату из инструкции к последнему стабильному релизу.
Ага... А 7zip не стороннее ПО? »
ваша аналогия неуместна - 7zip (или другой архиватор) для решения задачи необходим, а sed - нет
ну и где брать архиватор - понятно, а где брать sed - нет
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.