17

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

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

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

7 ответов7

23

Запустите из командной строки, рабочим каталогом которой является ваш каталог 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\*"
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.

4

Просто небольшое обновление ответа 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», которая будет упаковывать все выбранные папки в отдельные архивы.

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

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

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

3

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

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

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

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

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
1

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

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

0

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

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