Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Распаковка *.gz и перенос в другую папку (http://forum.oszone.net/showthread.php?t=333782)

biffick 16-03-2018 10:56 2803700

Распаковка *.gz и перенос в другую папку
 
Всем здравствуйте.

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

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

Код:

@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 2803744

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

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

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

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

megaloman 16-03-2018 13:04 2803751

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 2803767

Цитата:

Цитата megaloman
В архиве 1 файл? »

там даже файла нет, .gz - это сжатый поток, а не архив

biffick 16-03-2018 23:03 2803864

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

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

HTML код:

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


megaloman 16-03-2018 23:13 2803865

biffick, попробуйте использовать winrar
Код:

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

biffick 16-03-2018 23:30 2803868

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 2803870

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 2803872

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


Время: 16:05.

Время: 16:05.
© OSzone.net 2001-