Любой язык - [решено] архивирование с помощью батника

Ответить
Аватара пользователя
vvs360

Любой язык - [решено] архивирование с помощью батника

Сообщение vvs360 »

Доброго времени.Подскажите пожалуйста,есть батник for /R %%i in (*.*) do (7z a -tzip "%%i.zip" "%%i" & del "%%i"),есть папка в которой несколько папок.Надо заархивировать только файлы в папках.Не получается.Не сильно в этом силен.Если можно подробнее расписать,то буду благодарен.Спасибо.
Аватара пользователя
vvs360

Re: Любой язык - [решено] архивирование с помощью батника

Сообщение vvs360 »

Код:

Код: Выделить всё

@Echo Off
FOR /F "usebackq delims=" %%j IN (`Dir /s /b /A:D`) DO Call :SubDir "%%j"
GoTo :Eof
:SubDir
FOR /F "usebackq delims=" %%i IN (`Dir %1 /b /A:-D`) DO (
     7z a -tzip "%~1\%%i.zip" "%~1\%%i"
     If Exist "%~1\%%i.zip" del "%~1\%%i"
)
Аватара пользователя
vvs360

Re: Любой язык - [решено] архивирование с помощью батника

Сообщение vvs360 »

Спасибо огромное за ответ.Только у меня много в папке папок, и бат архивирует первую папку нормально,а последующие идут так zip.zip.zip, т.е. сколько папок столько и зипов. А мне надо по одному зипу.Спасибо.
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
vvs360

Re: Любой язык - [решено] архивирование с помощью батника

Сообщение vvs360 »

Разобрался,спасибо.Убрал переменную ( /s ) и все получилось.Еще раз спасибо.+++++++++
Аватара пользователя
vvs360

Re: Любой язык - [решено] архивирование с помощью батника

Сообщение vvs360 »

Я исправил ответ: батник правильно отработает со всеми папками, в том числе и вложенными. Кроме того, я посчитал, что перед удалением исходного надёжнее проверить наличие Zip-файла. Ваш рецепт убрать ключ /s не универсален.

Но, кроме того, в Вашей постановке кроется один "ухаб" - зачем упаковывать уже упакованный файл при повторном запуске батника. Вот вариант решения:

Код:

Код: Выделить всё

@Echo Off
FOR /F "usebackq delims=" %%j IN (`Dir /s /b /A:D`) DO Call :SubDir "%%j"
GoTo :Eof
:SubDir
FOR /F "usebackq delims=" %%i IN (`Dir %1 /b /A:-D`) DO (
     If /I Not %%~xi==.zip (
        7z a -tzip "%~1\%%i.zip" "%~1\%%i"
        If Exist "%~1\%%i.zip" del "%~1\%%i"
     )
)

То есть при повторном запуске упакуем только неупакованные файлы в папках, если они появятся
Ответить

Вернуться в «Скриптовые языки администрирования Windows»