Как заставить 7-zip сделать целую кучу папок

18

Я получил кучу фотографий, которые мне пришлось обрезать до 800x600 пикселей. Это было легко сделать, но теперь я должен загрузить их, чтобы семья могла увидеть их всех.

Дело в том, что это 500 МБ в картинках. Я решил просто сжать отдельные папки, каждая из которых содержит почти одинаковое количество картинок. Таким образом, я могу загружать пару каждый день. Делать это вручную - очень долгая и тяжелая работа. Интересно, есть ли способ заставить 7-zip обрабатывать каждую папку отдельно?

Я думаю, мне понадобится командный файл, но я не очень хорош в этом. Я положил все в одну папку. В разных подпапках находятся картинки. Мне нужно, чтобы содержимое этой папки было заархивировано. Я не уверен, могу ли я просто заархивировать папку вместе с ней. Я знаю, что в PHP есть модуль zip, я просто никогда не работал с ним, поэтому я не уверен, может ли он справиться с тем фактом, что содержимое zip - это папка, содержащая элементы, а не только элементы.

KdgDev
источник
1
О скольких папках ты говоришь? 7? 147? Если вы плохо разбираетесь в пакетных файлах, но, возможно, это хорошая возможность решить эту проблему. :)
JMD
Всего 105 папок
KdgDev

Ответы:

25

Запустите из командной строки, рабочим каталогом которой является ваш My Picturesкаталог, эта команда создаст zip-файл содержимого каждого подкаталога, оставив все zip-файлы в вашем My Picturesкаталоге.

Изменить: я добавил кавычки, необходимые для учета каталогов с пробелами в их именах.

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

Также: Следующая версия не помещает файлы в подкаталог внутри zip-файла, а вместо этого в его корень:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

В Windows 7 и выше

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

или

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
eleven81
источник
Я попытался добавить папку 7-zip в мой classpath, но это не сработает. Если я использую всю строку, чтобы найти исполняемый файл вместо 7z, это работает. Я думал, что добавление этой строки в путь к классу должно иметь такой же эффект?
KdgDev
Здесь classpathJava ищет классы и библиотеки. google.com/search?q=classpath Вы, вероятно, спутали это с тем, pathгде оболочка ищет исполняемые файлы.
одиннадцать81
Вопрос: скрипт работает, но не тогда, когда в имени папки есть пробелы ...
KdgDev
Спасибо за обновление. Со вторым сценарием, вы имеете в виду, что содержимое zip будет «сплющено»?
KdgDev
6
Это отлично сработало для меня, хотя мне пришлось сменить %%dего, %dпоскольку мой ящик с Win 7 жаловался на то, что имя переменной слишком длинное, что выдает ошибку «%% d было неожиданно в это время».
Бенджам
7

Я не мог заставить командную строку работать, вместо этого я загрузил WinRAR, и mtone была права - у WinRAR есть возможность сжать несколько папок в их собственные отдельные файлы ZIP.

Например, C:\Files\Fables 01в C:\Files\Fables 01.zipи C:\Files\Fables 02в C:\Files\Fables 02.zip.

С WinRAR откройте папку, содержащую папки, которые вы хотите сжать, а затем выполните следующие действия:

  • Выберите все папки, которые вы хотите сжать / редкие
  • Нажмите «ДОБАВИТЬ» или Alt+ Aили Команды -> «Добавить файлы в архив»
  • Выберите RAR или ZIP
  • перейдите на вкладку «Файлы»
  • Установите флажок «Поместить каждый файл в отдельный архив» в поле «Архивы».

Если у вас есть другие настройки, которые вам нравятся, нажмите OK и boom: несколько файлов ZIP из нескольких папок. Это работает намного проще, чем командная строка 7zip.

user134042
источник
Несмотря на то, что он говорит «каждый файл», этот флажок работает и с папками.
дхаупин
1
Из всех предложенных здесь решений это лучше всего сработало для меня в 2018 году. Просто убедитесь, что вы хотите, чтобы архив был .zip, или вместо этого он создаст кучу файлов .rar.
Эрик Хепперле - CodeSlayer2010
5

Просто небольшое обновление ответа eleven81: приведенный ниже код создает пакетный файл, в который можно поместить несколько элементов.

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

Этот пакетный файл может быть добавлен в контекстное меню через реестр:

  1. создайте новый ключ в [HKEY_CLASSES_ROOT \ Folder \ shell], назовите его cmd1
  2. Отредактируйте строковое значение и назовите его «Batch Zip»
  3. создайте другой новый ключ под этим и назовите это командой
  4. Измените значение этого на свой путь с двойными косыми чертами

Так, например, моя запись "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

После того, как вы это сделаете, в вашем контекстном меню появится запись «Batch Zip», которая будет упаковывать все выбранные папки в отдельные архивы.

Однако, если вы сделаете это через контекстное меню, он, к сожалению, запустит все операции одновременно, и, как знает любой, кто много раз архивировал и разархивировал, архивирование папок работает намного быстрее одна за другой, чем все сразу.

Если кто-нибудь знает способ исправить это в реестре, пожалуйста, сообщите.

Перетаскивание выбранных папок в пакет выполнит их одну за другой.

roryok
источник
1
7z exe не было у меня на пути, поэтому мне пришлось немного отредактировать ваш скрипт. "C: \ Program Files (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Райан,
1
+1 за поощрение лени с помощью drag & drop lol. Я только что опубликовал модифицированную версию @ http://superuser.com/a/1160047/678687
Enteleform
3

Совет: если ваши изображения в формате JPG, они уже сжаты. используйте 7-Zip в режиме «архив» без сжатия (уровень сжатия: сохранить), это значительно ускорит процесс.

даже если вы используете ультра сжатие, вы вряд ли получите 5%, что, безусловно, не стоит усилий.

Я думал с точки зрения практически добавления приложений.

я бы не отправил их в виде вложения электронной почты. вместо этого загрузите его на так называемый хостинг-сервер одним нажатием (например, drop.io, rs, mu, ms и т. д., вариантов достаточно), а затем отправьте ссылку на скачивание по электронной почте своим друзьям и семье.


источник
2
Тем не менее, их будет легче отправлять по почте.
Ладья
я не думаю, что есть большая разница в загрузке 475 или 500 МБ, конечно, недостаточно для того, чтобы компенсировать время, необходимое для сжатия огромного количества JPG с помощью «Ultra» :)
Я думал с точки зрения практически добавления приложений. Проще добавить один файл в качестве вложения, а не 10. (когда количество файлов увеличивается, это становится раздражающим).
Ладья
Вот почему Молли предложила режим «архив»; он объединяет их все в один файл, не тратя времени на то, чтобы сжать то, что уже сжато ...
Adrien
Это правда, что я ссылался на ее последнее предложение, но, тем не менее, даже с небольшим уменьшением размера файлов jpeg (а иногда это не так уж и мало), оно все же стоит. Время, затрачиваемое на сжатие, намного меньше, чем время, потраченное на его загрузку, скажем, в gmail или другую почту (gmail имеет относительно большой размер вложения).
Ладья
2

Я нашел ответ Ророка очень полезным, он предоставил batch scriptдля Windowsэтого drag-&-dropфайлы, которые можно быстро и автоматически архивировать.


Чтобы использовать этот скрипт, просто сохраните его с .batрасширением, а затем вы можете перетаскивать файлы и / или папки в пакетный файл ( или ярлык для пакетного файла ).

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


Некоторые обновления, которые я сделал, чтобы упростить настройку и общую функциональность:

  • добавлены именованные переменные
  • реализовал forцикл, который перебирает заданные аргументы
    ( наряду с delayedexpansionразрешением переменных времени выполнения )
  • добавлены ifусловия для дифференциации filesиfolders
    • это позволяет напрямую добавлять содержимое папки в архив, а не помещать родительскую папку в архив
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • добавлен журнал ошибок для отображения неудачных экземпляров или сообщения об успехе, если ошибок не было

@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files\7-Zip\7z.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause
Enteleform
источник
1

У 7-zip есть возможность разархивировать каждый файл в отдельную папку (* /), но в нем отсутствуют контекстные команды для выполнения действий, которые вы ищете.

Тем не менее, я помню, как делал эту точную вещь, используя winrar в прошлом. Есть опция «уникальный архив в папке» или что-то в этом роде.

MTONE
источник
-1

Загрузите Picasa и загрузите в веб-альбом Picasa. Тогда каждый сможет легко загрузить фотографии и просмотреть их в Интернете. Возможно, даже можно будет загрузить оригиналы (чтобы ваша семья могла распечатать более крупные версии).

Kurru
источник
Если вы думаете, что люди будут довольны загрузкой и извлечением zip-файлов, я думаю, вы будете разочарованы ... Веб-интерфейс намного проще для всех участников ....
Kurru