Компьютерный форум 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=193663)

Ins_16 11-12-2010 17:59 1563368

Заархивировать каждый файл в отдельный архив
 
Здравствуйте. Подскажите пожалуйста каким образом можно заархивировать все файлы в текущей папке в отдельные архивы?
Например папка Documents содержит 5 файлов и нужно получить 5 архивов.Формат архивов и архиватор роли не играют, имя архива должно повторять имя файла. Была уже Похожая тема но мне нужен Bat'ник.

SendMessage 12-12-2010 09:19 1563798

Например, так:
Код:

@echo off
for %%a in (*) do Rar.exe a -inul "%%a".rar "%%a"


Ins_16 12-12-2010 13:47 1563956

Спасибо

oma51 16-11-2012 04:35 2026610

для 7z можно так
for %%i in (%_in%\*.*) do "%_arcpath%\7z" a "%_out%\%%~ni.7z" "%%i"
Если что не понятно, можно посмотреть здесь Каждый файл в отдельный архив

cezar_bd 26-11-2012 18:38 2033366

for %%i in (%_in%\*.*) do "%_arcpath%\7z" a "%_out%\%%~ni.7z" "%%i"
это просто отлично, а как быть чтоб он упаковывал каталоги можно по списку, можно и все что есть в текущем каталоге

oma51 27-11-2012 02:58 2033609

чтобы скрипт рекурсивно упаковывал каталоги, нужно добавить ключик -r

cezar_bd 27-11-2012 10:11 2033723

Цитата:

Цитата oma51
чтобы скрипт рекурсивно упаковывал каталоги, нужно добавить ключик -r »

это я так понимаю
set _in=d:\1
set _out=d:\2
set _arcpath=c:\Program Files\7-zip
for %%i in (%_in%\*) do "%_arcpath%\7z" a -r "%_out%\%%~ni.7z" "%%i"
каталоги не берет в расчет (

cezar_bd 27-11-2012 12:42 2033827

Цитата:

Цитата cezar_bd
каталоги не берет в расчет ( »

необходимо было чуточку по другому
всем спасибо

for /d %%i in (%_in%\*) do "%_arcpath%\7z" a "%_out%\%%~ni.7z" "%%i"

Svetochh 24-03-2018 16:08 2805231

Прошу помочь так как не разбираюсь в вопросе.

Есть:
- каталог с вложенными каталогами в которых файлы fb2.
- WinRar с настроенным профилем архивирования - отдельно создает zip архив для каждого файла и удаляет исходный файл.

Нужно: Рекурсивно проверить все вложенные папки, выделить файлы, запустить упаковку WinRar-ом.

Беда в том что папок несколько тысяч и ручками слишком долго заходить в каждую.

Хотелось бы батник который сможет это сделать.

megaloman 24-03-2018 18:32 2805243

Код:

@Echo Off
cls

Set "BoxIn=Z:\Box_In"
Set "Maska=*.fb2"
Set "BoxArc=Z:\Box_Arc"

Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" a -ep -ibck -afzip -df"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Maska%" /b /s /a:-d`) DO (
        Echo %%f
        %Arc% "%BoxArc%\%%~nxf.zip" "%%f"
)
Pause

Не очень понял, что Вам надо.
Скрипт просматривает указанную папку с подпапками Dir
Ищет файлы по указанной маске /b /s /a:-d
Архивирует в фоновом режиме -ibck каждый файл отдельно в zip в указанную папку -afzip
В архиве путь файла исключается -ep
Исходные файлы удаляются -df
При совпадении имён файлов заархивированным останется один из них.

Svetochh 26-03-2018 15:23 2805578

Цитата:

Цитата megaloman
Архивирует в фоновом режиме -ibck каждый файл отдельно в zip в указанную папку -afzip
В архиве путь файла исключается -ep
Исходные файлы удаляются -df
При совпадении имён файлов заархивированным останется один из них. »

Скопировал и "Z:\Box_In" "Z:\Box_Arc" поменял на путь к папке
получилось Set "BoxIn=c:\Отечественная фантастика и фэнтези"

пишет: "для продолжения нажмите любую клавишу"

Жму и... ничего не происходит, просто закрывается окно командной строки.

Что делаю не так?

P.S. Путь к WinRar совпадает.

megaloman 26-03-2018 15:39 2805589

Цитата:

Цитата Svetochh
c:\Отечественная фантастика и фэнтези
пишет: "для продолжения нажмите любую клавишу"
Жму и... ничего не происходит, просто закрывается окно командной строки. »

Бат-файлы необходимо сохранять в 866 кодировке. У Вас кириллица в пути, поэтому это критично. Похоже, Вы сохранили код редактором типа блокнот, который способен работать только 1251 кодировкой. Под For стоИт Echo и при наличии файлов имена файлов отображаются. Если у Вас кириллица и скрипт в 1251 кодировке, то при запуске скрипта символы в имени папки отображаются в виде "зюкочек" и, естественно, такого пути у Вас нет и отображать нечего.

megaloman 27-03-2018 18:24 2805817

Если всё же сохранять батник в 1251 кодировке
Код:

@Echo Off
cls
chcp 1251 >nul

Set "BoxIn=Z:\Отечественная фантастика и фэнтези"
Set "Maska=*.fb2"
Set "BoxArc=Z:\Архив книг"

Md "%BoxArc%" 2>nul

Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" a -ep -ibck -afzip -df"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Maska%" /b /s /a:-d`) DO (
        Echo %%f
        %Arc% "%BoxArc%\%%~nxf.zip" "%%f"
)
Pause

Если заархивированный файл сохранять вместо оригинала в той же папке
Код:

@Echo Off
cls
chcp 1251 >nul

Set "BoxIn=Z:\Отечественная фантастика и фэнтези"
Set "Maska=*.fb2"

Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" a -ep -ibck -afzip -df"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Maska%" /b /s /a:-d`) DO (
        Echo %%f
        %Arc% "%%~f.zip" "%%f"
)
Pause


Alchiira.Moth@vk 07-01-2022 20:12 2976927

вот жеж програмысты %)
столкнулся с аналогичной необходимостью - заархивировать пакетно каждый файл в свой архив с тем же именем. как порядочный чел спросил у поисковика, на 2х языках ёпта.
одни заумные неработающие решения кругом в 50+ строк %)
пришлось самому перелопатить мануалы. не благодарите. 1 строка %))

for /r целевая род директория %i in (маска добавляемых файлов) do 7z a "%~dpi%~ni.7z" -mx9 -sdel "%i"

где все, что кириллицей заменить на свои значения каталога и маски в формате, например, c:\work и *.psd соответственно
(for - запускает цикл с /r рекурсией по подкаталогам целевой род директории, в котором %i переменная при каждом вхождении файла заданной маски ровняется его имени, включая полный путь к нему.
do при каждом срабатывании цикла выполняет команду 7z (переменные среды выполнения настраиваются в винде или же просто вместо 7z прописать путь к исполняемому файлу архиватора, в моем случае 7-zip) с параметром a(учтите, что при работе с каким либо другим архиватором могут быть и другие параметры) - архивировать в архив "%~dpi%~ni.7z", где %~dpi - часть перемененной %i, что содержит только путь к источнику; %~ni - часть переменной %i, что содержит только имя источника без расширения. ну и сервисные переменные в моем конкретном случае - -mx9 -степень сжатия и -sdel -удалить источник. и в-с-ё. больше ничего не нужно, никаких 50+ строк с задаваниями переменных и т.п. чепухи %))

это команда для командной строки. если нужно бат, то то же самое, только кругом двойные %%, где они попадаются

Iska 07-01-2022 23:54 2976935

Цитата:

Цитата Alchiira.Moth@vk
вот жеж програмысты %)
столкнулся с аналогичной необходимостью - заархивировать пакетно каждый файл в свой архив с тем же именем. как порядочный чел спросил у поисковика, на 2х языках ёпта.
одни заумные неработающие решения кругом в 50+ строк %)
пришлось самому перелопатить мануалы. не благодарите. 1 строка %)) »

Вы точно прочитали всё, что требовалось автору, и что было в теме?

Цитата:

Цитата Alchiira.Moth@vk
"%~dpi%~ni.7z" »

Код:

"%~dpni.7z"

DJ Mogarych 08-01-2022 11:31 2976970

Powershell:
Код:

dir "C:\temp\folder" |% {Compress-Archive "$($_.fullname)" -DestinationPath "$($_.DirectoryName)\$($_.BaseName).zip"}

intersk 29-03-2023 09:38 3006341

Цитата:

Цитата megaloman
Бат-файлы необходимо сохранять в 866 кодировке. У Вас кириллица в пути »

спасибо за подсказку, долго не мог решить это

a.k.a. Rasputin 18-11-2023 16:41 3020202

Прошу помощи с батником для архивации каждой папки в отдельный архив с помощью 7zip. Архивы должны иметь то же имя, что и папки

Использую следующее:
Код:

for /d %%A in (D:\*) do D:\7-Zip\7z.exe a -tzip -mx=5 -r -pPASS "F:\backup\D\%DATE%_%%~nxA.zip" "%%A" -xr@exclude.txt
Но проблема в том, что хотя в файле exclude.txt и указаны папки, которые не надо архивировать, 7zip все равно создает пустые архивы с именами этих папок. И без разницы, указано ли это через файл-исключение или просто прописано в скрипте

И еще, что прописать, чтобы в архиве было сразу содержимое архивируемой папки, а не папка и только в ней содержимое?

megaloman 18-11-2023 16:46 3020203

Где-то я это видел :)
Код:

@Echo Off &cls
        Set "BoxIn=A:"
        Set "BoxArc=Z:\backup\D"
        Set "Exclude=%~dpn0.exl"

        Set Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -mx=5 -r -ppass

        If Not Exist "%BoxIn%\" (Echo !!! Folder "%BoxIn%" not found &Pause &Exit /B 2)

        For /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D "%BoxIn%\" ^| FindStr /I /L /V /G:"%Exclude%"`) Do (
                >nul %Arc% "%BoxArc%\%DATE%_%%~nxd.zip" "%BoxIn%\%%d"
        )
pause
Exit /B

Пути, имя файла исключений напишите свои.
Цитата:

Цитата a.k.a. Rasputin
И еще, что прописать, чтобы в архиве было сразу содержимое архивируемой папки »

Не понял, в каком виде? Какая иерархия исходных папок?

a.k.a. Rasputin 18-11-2023 16:54 3020204

Цитата:

Цитата megaloman
Не понял, в каком виде? »

допустим, папка apk с файлами. На выходе имеем архив apk.zip в нем папка apk а в ней уже файлы. А хочется apk.zip и в нем сразу же файлы

Цитата:

Цитата megaloman
Пути, имя файла исключений напишите свои. »

попробую)

megaloman 18-11-2023 17:13 3020206

a.k.a. Rasputin, То есть у Вас архивируется папка с файлами в которой нет подпапок
Код:

@Echo Off &cls
        Set "BoxIn=A:"
        Set "BoxArc=Z:\backup\D"
        Set "Exclude=%~dpn0.exl"

        Set Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -mx=5 -ppass

        If Not Exist "%BoxIn%\" (Echo !!! Folder "%BoxIn%" not found &Pause &Exit /B 2)

        For /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D "%BoxIn%\" ^| FindStr /I /L /V /G:"%Exclude%"`) Do (
                Pushd "%BoxIn%\%%d"
                        >nul %Arc% "%BoxArc%\%DATE%_%%~nxd.zip"
                Popd
        )
pause
Exit /B


a.k.a. Rasputin 18-11-2023 17:22 3020207

Цитата:

Цитата megaloman
То есть у Вас архивируется папка с файлами в которой нет подпапок »

нет, дело не в этом. Тут вопрос, наверное, больше эстетический) Получается "матрешка" - архив -> папка -> содержимое. "папка" на мой взгляд здесь лишняя, т.к. архив и его название говорят о том, что это за папка. Просто удобнее был бы вариант архив -> содержимое.

Winrar в этом плане более гибкий и работает на ура. Вот только несколько запароленных бэкапов спустя n-е время перестали открываться, заявляя, что пароль неверный. Поэтому решил попробовать 7zip

megaloman 18-11-2023 17:28 3020208

Цитата:

Цитата a.k.a. Rasputin
Тут вопрос, наверное, больше эстетический »

Эстетика тут не при чем. Если у Вас матрешка в исходных папках: A:\Папка1\Папка2\Папка3, то иначе как с путями архивировать нет смысла.
А у Вас, похоже, A:\Папка1\файлы
А насчет rar не верю: что-то у Вас накладка с паролями, может, кодовые страницы до архивации и перед разархивацией в системе поменялись

a.k.a. Rasputin 18-11-2023 18:01 3020210

Цитата:

Цитата megaloman
Эстетика тут не при чем. Если у Вас матрешка в исходных папках: A:\Папка1\Папка2\Папка3, то иначе как с путями архивировать нет смысла.
А у Вас, похоже, A:\Папка1\файлы »

видимо, я неправильно объяснил. Под матрешкой я подразумеваю наличие в созданном архиве самОй архивируемой, корневой папки.
Вот пример
Здесь содержимое папки непосредственно в архиве
Скрытый текст


А здесь сначала папка, а потом уже ее содержимое (содержимое может быть абсолютно любым, включая подпапки. Суть, чтобы архив не включал ее)
Скрытый текст


Цитата:

Цитата megaloman
А насчет rar не верю: что-то у Вас накладка с паролями, может, кодовые страницы до архивации и перед разархивацией в системе поменялись »

не знаю, самому интересно. Копия того же архива с облака открывается нормально этим же паролем

Цитата:

Цитата megaloman
может, кодовые страницы до архивации и перед разархивацией в системе поменялись »

что это означает?

megaloman 18-11-2023 18:35 3020213

Красота неописуемая
Код:

@Echo Off &cls
        Set "BoxIn=A:"
        Set "BoxArc=Z:\backup\D"
        Set "Exclude=%~dpn0.exl"

        Set Arc="C:\Program Files\7-Zip\7z.exe" a -r -tzip -mx=5 -ppass

        If Not Exist "%BoxIn%\" (Echo !!! Folder "%BoxIn%" not found &Pause &Exit /B 2)

        For /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D "%BoxIn%\" ^| FindStr /I /L /V /G:"%Exclude%"`) Do (
                Pushd "%BoxIn%\%%d"
                        >nul %Arc% "%BoxArc%\%DATE%_%%~nxd.zip"
                Popd
        )
pause
Exit /B

Цитата:

Цитата a.k.a. Rasputin
Копия того же архива с облака открывается нормально этим же паролем »

А Вы сравнивали обе версии архива? Если они в чем-то не совпадают, rar при чем?

a.k.a. Rasputin 18-11-2023 23:07 3020220

Цитата:

Цитата megaloman
А Вы сравнивали обе версии архива? Если они в чем-то не совпадают, rar при чем? »

неа, не сравнивал
Фиг его знает, в чем причина. Мне Winrar тоже привычней и как уже писал, более гибок при создании таких вот скриптов

p.s. за скрипт спасибо! Проверил, вроде отработал на отлично :Beer:


Время: 02:29.

Время: 02:29.
© OSzone.net 2001-