Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как автоматически обновить содержимое архивов?

Ответить
Настройки темы
CMD/BAT - Как автоматически обновить содержимое архивов?

Новый участник


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

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


Изменения
Автор: Medvedoc
Дата: 23-07-2021
Вложения
Тип файла: zip Пример.zip
(3.8 Kb, 14 просмотров)
Добрый день! Как автоматически обновить на основании содержимого текстового документа содержимое файла архивов?

В папке имеются множественные архивы формата zip с текстовыми документами в формате txt.

То есть структура такая:

Код: Выделить весь код
папка
- архив aaa.txt.zip
- - текстовый файл aaa.txt
- архив bbb.txt.zip
- - текстовый файл bbb.txt
- архив ccc.txt.zip
- - текстовый файл ccc.txt
- и так далее
Код: Выделить весь код
Содержимое архива
- текстовый файл.txt  (например, aaa.txt или bbb.txt)
И есть просто текстовый документ, на основании которого необходимо обновить информацию в архивах
файл обновления
Код: Выделить весь код
текстовый файл
- text.aaa
- text2.aaa
- text3.aaa
- text4.bbb
- text5.bbb
- text6.ccc
- text7.ccc
- и так далее
Нужно взять из текстового документа построчно каждую строку, получить правую часть текста, найти по нему нужный архив и добавить в него данную строку.
Схематически:
  1. в текстовом файле имеется строка text.aaa
  2. получаем правую часть текста после точки aaa
  3. находим архив с одноименным названием ааа.txt.zip
  4. добавляем в содержащийся в нем текстовый файл aaa.txt полностью строку text.aaa

Прикрепил схематический пример как было и как должно получиться

И соответственно обратный эффект при наличии другого файла - удалять строки в архивах если есть в текстовом файле.

Отправлено: 09:58, 23-07-2021

 

Ветеран


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

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


Вы уж определитесь:
Скрытый текст
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:47, 23-07-2021 | #2



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

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


Новый участник


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

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


Iska, правильно в структуре указано

Отправлено: 20:22, 23-07-2021 | #3


Ветеран


Contributor


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

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


Medvedoc,
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In\Пример"
	Set "Ext=zip"
	Set "Ext=txt.zip"
	Set "FileTxt=Z:\Box_In\Пример\Текстовый файл.txt"

	Set Arc="C:\Program Files\WinRAR\WinRAR.exe"
	
	If Not Exist "%FileTxt%" Echo File "%FileTxt%" not found &Pause &Exit /B

	Set "DirTmp=%BoxIn%\%~nx0.tmp"
	2>nul Rd /S /Q "%DirTmp%"
	Md "%DirTmp%"

	Pushd %BoxIn% &&(
		FOR /F "usebackq delims=" %%s IN ("%FileTxt%") DO (
			Echo %%s>>"%DirTmp%\%%~xs.txt"
		)
		For /F "usebackq tokens=* delims=." %%i In (`2^>nul Dir "%DirTmp%\.*.txt" /B /A:-D`) Do (
			If Exist "%%~ni.%Ext%" (
				%Arc% e -y -ibck "%%~ni.%Ext%" "%%i"
				If Exist "%%i" (
					>nul Copy /B "%%i"+"%DirTmp%\.%%i" "%%i"
					%Arc% a -y -ep -df -ibck "%%~ni.%Ext%" "%%i"
				)
			)
		)
		Popd
	)
	2>nul Rd /S /Q "%DirTmp%"
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "ToDay=%%d"
	>nul Move "%FileTxt%" "%FileTxt%.%ToDay%"
Pause
Exit /B
Так как постановка путанная, сейчас работает формат имени aaa.txt.zip, если надо aaa.zip строку
Set "Ext=txt.zip"
удалите

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-07-2021 в 08:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:48, 23-07-2021 | #4


Новый участник


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

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


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

А как сделать теперь наоборот? Поиск по папкам и удаление если имеется? То есть берется название из текстового файла пробегается по архивам и если такое есть просто удаляет его.

Отправлено: 08:50, 24-07-2021 | #5


Ветеран


Contributor


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

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


Medvedoc, чтобы не было проблем с кириллицей, сохраняйте батник в 866 кодировке.
Либо после cls вставьте
>nul chcp 1251
Цитата Medvedoc:
берется название из текстового файла пробегается по архивам и если такое есть просто удаляет его »
Что есть в текстовом файле и что удаляется: строка в заархивированном файле или целиком архив.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:57, 24-07-2021 | #6


Ветеран


Contributor


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

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


Medvedoc, Если удалить в заархивированном файле строки, указанные в текстовом, то:
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In\Пример"
	Set "Ext=zip"
	Set "Ext=txt.zip"
	Set "FileTxt=Z:\Box_In\Пример\Текстовый файл.txt"

	Set Arc="C:\Program Files\WinRAR\WinRAR.exe"
	
	If Not Exist "%FileTxt%" Echo File "%FileTxt%" not found &Pause &Exit /B

	Set "DirTmp=%BoxIn%\%~nx0.tmp"
	2>nul Rd /S /Q "%DirTmp%"
	Md "%DirTmp%"

	Pushd %BoxIn% &&(
		FOR /F "usebackq delims=" %%s IN ("%FileTxt%") DO (
			Echo %%s>>"%DirTmp%\%%~xs.txt"
		)
		For /F "usebackq tokens=* delims=." %%i In (`2^>nul Dir "%DirTmp%\.*.txt" /B /A:-D`) Do (
			If Exist "%%~ni.%Ext%" (
				%Arc% e -y -ibck "%%~ni.%Ext%" "%%i"
				If Exist "%%i" (
					>".%%i" FindStr /B /L /I /V /G:"%DirTmp%\.%%i" "%%i"
					>nul Move /Y ".%%i" "%%i"
					%Arc% a -y -ep -df -ibck "%%~ni.%Ext%" "%%i"
				)
			)
		)
		Popd
	)
	2>nul Rd /S /Q "%DirTmp%"
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "ToDay=%%d"
	>nul Move "%FileTxt%" "%FileTxt%.%ToDay%"
Pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-07-2021 в 08:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:56, 24-07-2021 | #7


Новый участник


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

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


Да, все отлично работает спасибо большое

А что нужно добавить, чтобы в командной строке видеть процесс выполнения? А то когда папок больше 100 не понятно идет процесс или нет

Отправлено: 19:26, 24-07-2021 | #8


Ветеран


Contributor


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

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


Цитата Medvedoc:
А то когда папок больше 100 »
Папок или архивов? Если архивов, то добавить одну строку с Echo после If
Код: Выделить весь код
			If Exist "%%~ni.%Ext%" (
				Echo %Time%	"%%~ni.%Ext%"  
Чтобы архиватор не мешал наблюдать процесс добавил ключ -ibck

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-07-2021 в 08:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:38, 24-07-2021 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как автоматически обновить содержимое архивов?

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как автоматически обновить конфигурацию оборудования в диспетчере устройств? nikhama AutoIt 1 12-08-2011 10:24
Win32 API - [решено] [C++] Как программно обновить содержимое окна Drongo Программирование и базы данных 8 31-03-2009 01:47
как обновить и чем обновить BIOS ASUS P4P800se Brad Поиск драйверов, прошивок и руководств 1 30-03-2009 05:05
как автоматически установить драйвера из архивов при установке винды epu-sunter Автоматическая установка Windows 2000/XP/2003 2 13-01-2009 08:20
Разное - [решено] Как лучше всего обновить систему. И стоит ее обновить? Bester Microsoft Windows 2000/XP 7 05-01-2008 20:53




 
Переход