архивирование с помощью батника
Доброго времени.Подскажите пожалуйста,есть батник for /R %%i in (*.*) do (7z a -tzip "%%i.zip" "%%i" & del "%%i"),есть папка в которой несколько папок.Надо заархивировать только файлы в папках.Не получается.Не сильно в этом силен.Если можно подробнее расписать,то буду благодарен.Спасибо.
|
Код:
@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"
)
|
Вложений: 1
Спасибо огромное за ответ.Только у меня много в папке папок, и бат архивирует первую папку нормально,а последующие идут так zip.zip.zip, т.е. сколько папок столько и зипов. А мне надо по одному зипу.Спасибо.
|
Разобрался,спасибо.Убрал переменную ( /s ) и все получилось.Еще раз спасибо.+++++++++
|
Я исправил ответ: батник правильно отработает со всеми папками, в том числе и вложенными. Кроме того, я посчитал, что перед удалением исходного надёжнее проверить наличие 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"
)
)
То есть при повторном запуске упакуем только неупакованные файлы в папках, если они появятся
|
Спасибо за ответ ,все работает.
|
Время: 09:56.
© OSzone.net 2001-