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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помощь в автоматической разархивации (http://forum.oszone.net/showthread.php?t=262030)

zerius 07-06-2013 12:23 2163719

Помощь в автоматической разархивации
 
Добрый день. Есть такая задача:

На определнном ресурсе лежит множество zip архивов, в каждом из которых лежат папки с файлами. Периодически имена папок (но не файлов в них) повтряются Нужен батник, который будет поочередно распаковывать все архивы в текущую директорию, автоматически перезаписывая данные (т.е. без уведомления). После распаковки все архивы удаляются. Прошу помочь.

Iska 07-06-2013 13:45 2163787

В каком порядке производить извлечение?

RodionRuRu 07-06-2013 14:26 2163819

Мне тоже нужна помощь в этом, по идее удаления архивов это прессет -df

Iska 07-06-2013 20:55 2164080

RodionRuRu, Вам адресую тот же вопрос.

zerius 10-06-2013 11:20 2165256

Цитата:

Цитата Iska (Сообщение 2163787)
В каком порядке производить извлечение?

Без разницы, главное, чтобы все архивы поочередно извлеклись.

Iska 10-06-2013 14:45 2165325

Цитата:

Цитата zerius
Без разницы, »

Не бывает «без разницы» для озвученных условий.

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

У Вас какой из этих двух вариантов?


Для «порядок без разницы, перезаписывать файлы»:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in ("E:\Песочница\0272\*.zip") do (
        <nul set /p sTempVar=%%~fi :
        >nul "%ProgramFiles%\7-Zip\7z.exe" x -aoa "%%~fi" && (
                echo OK
                del /f /q "%%~fi"
        ) || (
                echo Failure
        )
)

endlocal
exit /b 0

Для «порядок без разницы, пропускать файлы»:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in ("E:\Песочница\0272\*.zip") do (
        <nul set /p sTempVar=%%~fi :
        >nul "%ProgramFiles%\7-Zip\7z.exe" x -aos "%%~fi" && (
                echo OK
                del /f /q "%%~fi"
        ) || (
                echo Failure
        )
)

endlocal
exit /b 0


zerius 10-06-2013 15:35 2165357

Пропускать не надо. Суть в том, что папки уже существуют на ресурсе, те, которые в архивах, имею такие же имена. При разархивации система будет спрашивать перезапись. У меня правда ни тот, ни другой скрипты не работают.

Пардон, работает.

Iska 10-06-2013 15:58 2165366

zerius, так какой у Вас вариант из двух перечисленных выше:
Цитата:

Цитата Iska
Если содержимое одноимённых файлов разнится — порядок извлечения имеет существенное значение. Если содержимое файлов одинаково — какой смысл перезаписывать файлы, вместо того, чтобы пропускать их? »

?

zerius 10-06-2013 17:00 2165398

Цитата:

Цитата Iska (Сообщение 2165366)
zerius, так какой у Вас вариант из двух перечисленных выше:
Цитата:

Цитата Iska
Если содержимое одноимённых файлов разнится — порядок извлечения имеет существенное значение. Если содержимое файлов одинаково — какой смысл перезаписывать файлы, вместо того, чтобы пропускать их? »

?

У меня первый. Только загвостка возникла, судя по всему за текущую директорию принимается папка, где лежит скрипт. Можно то же самое, что в первом варианте, только с экстрактом не в текущую, а другую директорию?

Iska 10-06-2013 23:11 2165591

Цитата:

Цитата zerius
судя по всему за текущую директорию принимается папка, где лежит скрипт. »

Нет. Просто, если Вы запускаете пакетный файл из Проводника двойным щелчком — текущим каталогом для командного процессора будет именно каталог, где содержится этот пакетный файл. Если Вы запускаете пакетный файл из любого произвольного каталога — с указанием относительного или абсолютного пути к пакетному файлу — то текущим каталогом так и останется тот, что был установлен в командном процессоре, ярлыке и т.п.

Цитата:

Цитата zerius
Можно то же самое, что в первом варианте, только с экстрактом не в текущую, а другую директорию? »

Добавьте параметр:
Цитата:

-o (set Output directory) switch
Specifies a destination directory where files are to be extracted.
Например:
Код:


>nul "%ProgramFiles%\7-Zip\7z.exe" x -aoa -oc:\Temp "%%~fi" && (



Время: 12:51.

Время: 12:51.
© OSzone.net 2001-