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

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

Ответить
Настройки темы
CMD/BAT - [решено] Распаковка *.gz и перенос в другую папку

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


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

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


Изменения
Автор: biffick
Дата: 16-03-2018
Описание: Подправил
Всем здравствуйте.

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

- распаковывал первый архив GeoLiteCity.dat.gz (в котором файл GeoLiteCity.dat)
- переносил файл из C:\1\GeoLiteCity.dat в D:\GeoLiteCity.dat

- распаковывал второй архив GeoIP.dat.gz (в котором файл GeoIP.dat)
- переносил файл из C:\1\GeoIP.dat в D:\GeoIP.dat

В системе стоит WinRar

Буду ооочень благодарен

Отправлено: 10:56, 16-03-2018

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo off
Set "Arc="%ProgramFiles%\WinRar\Rar.exe" e -y"

Call :UnArc "Z:\Soft_Arc\GeoLiteCity.dat.gz" "GeoLiteCity.dat" "Z:\"
Call :UnArc "Z:\Soft_Arc\GeoIP.dat.gz" "GeoIP.dat" "Z:\"

GoTo :Eof

:UnArc
	If Not Exist %1 (Echo %1 Not Exist &Exit /B 404) 
	Pushd %3 ||(Echo %3 &Exit /B 404)
	%Arc% %1 %2
	Set /A Out=%ErrorLevel%
	Popd
Exit /B %Out%
Пропишите свои пути файлов Call :UnArc "Путь к архиву" "имя файла" "куда извлекаем"
Попутно вопросы:
В архиве 1 файл?
Почему Вы извлекаете файл в C:\1\GeoIP.dat а не сразу в D:\

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


Отправлено: 12:39, 16-03-2018 | #2



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

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


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


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

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


megaloman
1. В каждом архиве по одному файлу
2. У меня стоит веб сервер на диске С, т.е. папка доменов на С.

У меня система хитрая вышла:
а) создан php-скрипт, который качает базы GeoIP (а базы эти в *.gz-рахивах)
б) через cron этот скрипт запускается, чтобы файлы скачались
в) но файлы нужно хранить в 4 разных папках, которые расположены на диске D

Т.е. файлы нужно скачать, распаковать и в таком виде уже сунуть на диск D

Хм... кстати, я не предусмотрел этого в топике изначально - возможно ли сделать так, чтобы было несколько путей, куда файлы копировались бы? То есть два этих файла надо копировать сразу в: D:\1, D:\2, D:\3 и D:\4

Отправлено: 12:53, 16-03-2018 | #3


Ветеран


Contributor


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

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


biffick,
Для начала, работает ли мой батник, например, для случая одной выходной папки?
Код: Выделить весь код
@Echo off
Set "Arc="%ProgramFiles%\WinRar\Rar.exe" e -y"

Call :UnArc "Z:\Soft_Arc\GeoLiteCity.dat.gz" "GeoLiteCity.dat" "Z:\1\"
Call :UnArc "Z:\Soft_Arc\GeoIP.dat.gz" "GeoIP.dat" "Z:\1\"

GoTo :Eof

:UnArc
	If Not Exist %1 (Echo %1 Not Exist &Exit /B 404) 
	Pushd %3 ||(Echo %3 &Exit /B 404)
	%Arc% %1 %2
	Set /A Out=%ErrorLevel%
	Popd
Exit /B %Out%
Пропишите свои пути

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

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

Отправлено: 13:04, 16-03-2018 | #4


Ветеран


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

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


Цитата megaloman:
В архиве 1 файл? »
там даже файла нет, .gz - это сжатый поток, а не архив

Отправлено: 14:48, 16-03-2018 | #5


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


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

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


megaloman, код не распаковывает.

1. Если в путях есть русские символы, то вообще батник ничего не показывает.
2. Если всё окей с символами в пути, то получа такое сообщение:

HTML код: Выделить весь код
C:\GeoLiteCity.dat.gz - не архив RAR Нет файлов для извлечения


Последний раз редактировалось biffick, 16-03-2018 в 23:06. Причина: Дописал


Отправлено: 23:03, 16-03-2018 | #6


Ветеран


Contributor


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

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


biffick, попробуйте использовать winrar
Код: Выделить весь код
Set "Arc="%ProgramFiles%\WinRar\WinRar.exe" e -y"
Чтобы не было проблем с русскими символами,следует батник создавать и сохранять в 866 кодировке (DOS)

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

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

Отправлено: 23:13, 16-03-2018 | #7


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


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

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


megaloman, да, так распаковал и перенёс.
Можно сделать схему такую:

Файл C:\GeoIP.dat -> переносить в папку C:\papka\
Файл C:\GeoLiteCity.dat -> переносить в папку C:\papka\
Файл C:\GeoIP.dat -> переносить в папку C:\papka_p\
Файл C:\GeoLiteCity.dat -> переносить в папку C:\papka_p\
Файл C:\GeoIP.dat -> переносить в папку C:\papka_r\
Файл C:\GeoLiteCity.dat -> переносить в папку C:\papka_r\
Файл C:\GeoIP.dat -> переносить в папку C:\papka_e\
Файл C:\GeoLiteCity.dat -> переносить в папку C:\papka_e\
(пути и названия файлов и папок, естественно, сам поменяю)

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

Отправлено: 23:30, 16-03-2018 | #8


Ветеран


Contributor


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

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


biffick,
Код: Выделить весь код
@Echo off
Set "Arc="%ProgramFiles%\WinRar\WinRar.exe" e -y"

Call :UnArc "Z:\Soft_Arc\GeoLiteCity.dat.gz" "GeoLiteCity.dat" "Z:\1\" "Z:\2\" "Z:\3\" "Z:\4\"
Call :UnArc "Z:\Soft_Arc\GeoIP.dat.gz" "GeoIP.dat" "Z:\1\" "Z:\2\" "Z:\3\" "Z:\4\"

GoTo :Eof

:UnArc
	If Not Exist %1 (Echo %1 Not Exist &Exit /B 404)

	Md %3 2>nul 
	Pushd %3 
	%Arc% %1 %2
	Set /A Out=%ErrorLevel%
	Popd
	If Not %Out%==0 Exit /B %Out%
	Set "FName=%~3\%~2"

	:Begin
		Shift /3
		If "%~3"=="" Exit /B %Out%
		Md %3 2>nul
		Copy "%FName%" %3 >nul
		Set /A Out+=%ErrorLevel%
	GoTo :Begin 
Exit /B %Out%
Количество и имена выходных папок произвольно, как укажете в параметрах

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

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

Отправлено: 23:41, 16-03-2018 | #9


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


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

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


megaloman, да, всё прекрасно отрабатывает! Большое Вам спасибо!

Отправлено: 00:09, 17-03-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Распаковка ВСЕХ архивов в папку с тем же именем death7lord Скриптовые языки администрирования Windows 9 11-01-2020 15:21
Перенаправление в другую папку binx Вебмастеру 0 15-11-2014 23:45
PowerShell - [решено] Перенос ящиков в другую базу pogo Скриптовые языки администрирования Windows 5 15-09-2014 15:14
2008 - Чем примонтировать сетевую папку в другую папку? Actor Windows Server 2008/2008 R2 9 20-01-2014 21:58
VBS/WSH/JS - перенос НЕ открытых документов в другую папку SaTaNick Скриптовые языки администрирования Windows 5 10-12-2009 15:15




 
Переход