Войти

Показать полную графическую версию : [решено] Распаковка *.gz и перенос в другую папку


biffick
16-03-2018, 10:56
Всем здравствуйте.

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

- распаковывал первый архив 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

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

megaloman
16-03-2018, 12:39
@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:\

biffick
16-03-2018, 12:53
megaloman
1. В каждом архиве по одному файлу
2. У меня стоит веб сервер на диске С, т.е. папка доменов на С.

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

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

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

megaloman
16-03-2018, 13:04
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%Пропишите свои пути

Busla
16-03-2018, 14:48
В архиве 1 файл? »
там даже файла нет, .gz - это сжатый поток, а не архив

biffick
16-03-2018, 23:03
megaloman, код не распаковывает.

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

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

megaloman
16-03-2018, 23:13
biffick, попробуйте использовать winrarSet "Arc="%ProgramFiles%\WinRar\WinRar.exe" e -y"Чтобы не было проблем с русскими символами,следует батник создавать и сохранять в 866 кодировке (DOS)

biffick
16-03-2018, 23:30
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\
(пути и названия файлов и папок, естественно, сам поменяю)

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

megaloman
16-03-2018, 23:41
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%Количество и имена выходных папок произвольно, как укажете в параметрах

biffick
17-03-2018, 00:09
megaloman, да, всё прекрасно отрабатывает! Большое Вам спасибо!




© OSzone.net 2001-2012