Как можно заархивировать 260 папок по отдельности, используя 7zip одной командой?

Человек, который первоначально задал этот вопрос, добровольно удалил сообщение. Поскольку это была интересная задача, я воскресил вопрос и разработал решение, которое публикуется ниже в качестве ответа.

3 ответа3

1

Напишите так, и проблем не будет.

7z a  -t7z "c:\users\user\desktop\folder\%%G.7z" c:\users\user\desktop\folder\%%G -r
1

Это работает для файлов, не являющихся подпапками в родительской папке http://dropcanvas.com/w7u6a/3

http://dropcanvas.com/w7u6a/3

@echo off
cd /d %~dp0
rem 7z.exe path
set sevenzip=
if "%sevenzip%"=="" if exist "%ProgramFiles(x86)%\7-zip\7z.exe" set sevenzip=%ProgramFiles(x86)%\7-zip\7z.exe
if "%sevenzip%"=="" if exist "%ProgramFiles%\7-zip\7z.exe" set sevenzip=%ProgramFiles%\7-zip\7z.exe
if "%sevenzip%"=="" echo 7-zip not found&pause&exit
set extension=.mp4
for %%a in (*%extension%) do "%sevenzip%" a "%%~na.7z" "%%a"
pause
[/CODE]
0

Вот скрипт для этого (пропустите комментарии "//", которые показаны для пояснения):

@echo off
for /D %%G IN (*) DO (
    //This is my path to 7-Zip, it could be different for you
cd c:\program files\7-zip
    //This is the dir of the parent folder in which you want the subfolders to be zipped individually.
7z a  -t7z c:\users\user\desktop\folder\%%G.7z c:\users\user\desktop\folder\%%G -r )
pause

-t7z - это используемый формат архива .7z.

Чтобы использовать скрипт:

При написании сценария предполагается, что у вас есть родительская папка с подкаталогом, который вы хотите сжать индивидуально (каждый подкаталог в своем собственном zip-архиве).

Визуальное представление:

----Parent Directory
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)

Лерс говорит, что подкаталоги, которые вы хотите сжать, находятся в C:\Users\Foo\Documents . Так это будет выглядеть так:

----C:\Users\Foo\Documents
--------Foo1
--------Foo2
--------Foo3
--------Foo4
--------Foo5

В приведенном мною сценарии вы должны отредактировать строку:

7z a  -t7z c:\users\user\desktop\folder\%%G.7z c:\users\user\desktop\folder\%%G -r )

сказать:

7z a  -t7z c:\Users\Foo\Documents\%%G.7z c:\Users\Foo\Documents\%%G -r )

Итак, теперь мы должны установить расположение 7z.exe, чтобы скрипт мог работать правильно.

ПРИМЕЧАНИЕ. Вам не нужно этого делать, если вам удалось установить переменную среды для 7z.exe. Для тех, кто преуспевает, опустите строку cd c:\program files\7-zip . Чтобы проверить, работает ли он или нет, просто откройте cmd.exe и введите 7z , если вы получите список опций и параметров, то он сработал, а если нет, то продолжайте с командой cd .

Найдите, где вы установили 7-Zip и скопируйте каталог и добавьте его после cd . В этом примере он будет установлен в C:\Program Files\7-Zip . Таким образом, готовый скрипт будет выглядеть так:

@echo off
for /D %%G IN (*) DO (
cd C:\Program Files\7-Zip
7z a  -t7z c:\Users\Foo\Documents\%%G.7z c:\Users\Foo\Documents\%%G -r )
pause

Теперь сохраните сценарий как расширение файла .bat , если вы используете блокнот, вы должны изменить « Save as Type для All Files (".") .

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

ПРИМЕЧАНИЕ. Если у вас есть папки, в которых есть пробелы, имя не будет выводиться целиком, но там, где перед пробелом будет первое слово. Пример: Foo 1 будет заархивирован как Foo.7z (без bueno). То же самое с несколькими папками с первым словом как Foo и Foo 1 , они оба сталкиваются с последней проблемой, которую я объяснил, и когда Foo впервые архивируется, архив для Foo 1 будет пытаться перезаписать Foo , потому что они имеют одинаковые название. Если вы можете найти работу вокруг этого, слава вам!

Вы также можете попробовать версию моего скрипта Тайлера, конечно, он более "универсально совместим" и предполагает наличие 7z.exe в качестве EV (Переменная окружающей среды).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .