Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения

Ответить
Настройки темы
Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения

Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Изменения
Автор: v79italya
Дата: 02-09-2019
Приветствую. как можно JS-скриптом или Batом открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения?
на скринах показаны шаги. архив открывается двумя шагами. сначала ПКМ -> 7-Zip -> Открыть архив. затем ПКМ -> Просмотр. нажав Просмотр, жду около минуты(это, наверное, надо учесть, поставив как то паузу) открытие файла. когда файл откроется, нажимаю Правка -> Найти.. ищу </xyzID> . все вместе <xyzID>3</xyzID> . только вместо тройки может быть любое число одно-трехзначное. и вот вместо 3(или другого числа) надо поставить 27. причем, когда набираю 27, то опять нужно около минуты ждать(опять надо учесть). потом закрываю файл с сохранением изменений и обновлением файла в архиве. возможно ли это все делать на автомате?
адрес файла и имя файла, наверное, лучше в скрипте указать. сейчас так: C:\red\xyz.iwprj2
сейчас в файле текст укорочен. поэтому будет быстро сохраняться изменения. на самом деле надо около минуты-полторы.

Отправлено: 19:08, 17-08-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


v79italya, можно, но совсем не так, как Вы себе это представляете.

Исходные данные:
  1. Знаем точное местоположение файла архива.
  2. Знаем точное местоположение искомого файла в архиве.
  3. Знаем, что потребно искать.
  4. Знаем, какой архиватор будем пользовать, и предполагаем, что он может быть установлен по стандартному месторасположению.

Процесс:
  1. Проверяем существование файла архива.
  2. Проверяем существование архиватора.
  3. Проверяем существование искомого файла в архиве.
  4. Извлекаем искомый файл из архива во временный каталог.
  5. Читаем содержимое искомого файла, осуществляем поиск и замену.
  6. Если поиск был успешен — сохраняем новое содержимое в искомый файл, помещаем искомый файл в архив с заменой, удаляем временный каталог с файлом.
Поместите в gzip-архив весь искомый файл целиком.

Отправлено: 20:11, 17-08-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:51, 17-08-2019 | #3


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Iska:
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, а нельзя ли готовое решение?

Отправлено: 06:51, 18-08-2019 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


greg zakharov, это всё, конечно, интересно, но имеет достаточно ограниченную область применения. Как там с кодировками, BOM, концами строк, а?

Цитата v79italya:
попробуйте распаковать архив на диск С: . »
Попробуйте выложить архив с полным содержимым xml-файла xyz.

Цитата v79italya:
на скринах показано как я делаю это вручную. и хотелось бы также программно. »
Я уже написал, что «так же» программно не получится. Как — тоже написал. Другой вариант предложил коллега greg zakharov.

Отправлено: 13:59, 18-08-2019 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


greg zakharov, 7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся. Да и sed я бы не стал советовать - стороннее ПО, да и "вещь в себе" - лучше на PoSh сварганить замену.

Цитата Iska:
Процесс:
Проверяем существование файла архива.
Проверяем существование архиватора.
Проверяем существование искомого файла в архиве. »
Таких пунктов можно бесконечное число навертеть.
Если их убрать ничего не изменится - о проблеме ОС/интерпретатор сообщит, а "результат" будет тот же.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:23, 18-08-2019 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Busla:
7zip в поток выводит только потоковые форматы, традиционные .zip, .rar, .7z к ним не относятся. »
Поясните?!

Цитата Busla:
Если их убрать ничего не изменится - о проблеме ОС/интерпретатор сообщит, а "результат" будет тот же. »
Можно, конечно, и так. Но лучше заранее обрабатывать такие ситуации.

Отправлено: 15:04, 18-08-2019 | #7


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Iska:
архив с полным содержимым xml-файла »
написал Вам в личку.
а там:
Iska превысил(а) максимальный объем сохраненных персональных сообщений и не может получать новые сообщения, пока не удалит часть старых.

Отправлено: 15:04, 18-08-2019 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата v79italya:
написал Вам в личку. »
Там что-то секретное, что ли, и Вы не хотите сие «светить»? Ну, пришлите на почту.

Отправлено: 15:12, 18-08-2019 | #9


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Iska, и со второго раза не получилось отправить в личку, а на маил не предусмотрено прикрепление файл.
в принципе то же самое, только текста больше. можно и обойтись

Отправлено: 15:29, 18-08-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Выскакивает ошибка "Вы пытаетесь открыть файл имеющий тип системный файл (.dll)" yuazakharov Microsoft Windows 10 5 06-10-2018 12:06
CMD/BAT - [решено] Упаковать файл в архив ARJ с таким же именем как и файл Felix-rus53 Скриптовые языки администрирования Windows 1 13-02-2018 22:46
Вопрос - PDF файл открывается как ZIP. slonikdva Защита компьютерных систем 13 29-10-2017 22:15
2013 - Как открыть файл *.mdb, не используя *.ldb? IksSafonsky Microsoft Office (Word, Excel, Outlook и т.д.) 0 15-02-2016 16:09
CMD/BAT - Найти файл используя список с именами в txt файле Spacejet Скриптовые языки администрирования Windows 0 29-07-2015 10:02




 
Переход