Як змусити 7-блискавку зробити цілу купу папок


18

Я отримав купу фотографій, які мені довелося обрізати на 800x600 пікселів. Це було легко зробити, але тепер я маю їх завантажити, щоб сім'я змогла їх побачити всіх.

Річ у тому, що це 500 Мб у картинках. Я вирішив просто застебнути окремі папки, у кожній з яких є майже однакова кількість зображень. Таким чином я можу завантажувати пару щодня. Робити це вручну - дуже довга і важка робота. Цікаво, чи є спосіб зробити 7-поштову обробку кожної папки окремо?

Думаю, мені знадобиться пакетний файл, щоб це зробити, але я з цим не добрий. Я все помістив під одну папку. У різних папках є те, де розташовані зображення. Що мені потрібно - це вміст цієї папки, який можна зафіксувати. Я не впевнений, чи зможу я просто застебнути папку разом із нею. Я знаю, що в PHP є zip-модуль, я просто ніколи з ним не працював, тому я не впевнений, чи може він впоратися з тим, що вміст zip - це папка, яка містить елементи, а не просто елементи.


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\*"

Я спробував додати папку 7-zip на свій класний шлях, але це не вийде. Якщо я використовую весь рядок, щоб знайти виконаний файл, а не лише 7z, він спрацьовує. Я хоч, що додавання цього рядка до шляху до класу повинно мати той же ефект?
KdgDev

classpathДе Java шукає класи і бібліотеки. google.com/search?q=classpath Ви, мабуть, переплутали це з тим, pathде оболонка шукає виконувані файли.
одинадцять81

Питання: сценарій працює, але не тоді, коли в назві папки є пробіли ...
KdgDev

Дякуємо за оновлення. Під другим сценарієм ви маєте на увазі, що вміст поштового індексу буде «сплющеним»?
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 відкрийте папку, яка містить папки, які ви хочете скопіювати, та виконайте наступні дії:

  • Виберіть усі папки, які ви хочете отримати на блискавці / розміщенні
  • Клацніть "ADD" або Alt+ Aабо Commands -> "Додати файли в архів"
  • Виберіть RAR або ZIP
  • перейдіть на вкладку "Файли"
  • Поставте прапорець "Помістити кожен файл в окремий архів" під полем "Архів"

Коли у вас є інші налаштування, які вам подобаються, виберіть "ОК" і "Бум": кілька ZIP-файлів з декількох папок. Це спрацювало набагато простіше, ніж командний рядок 7zip.


Незважаючи на те, що написано "кожен файл", цей прапорець також працює і з папками.
dhaupin

1
З усіх запропонованих тут рішень це найкраще працювало для мене у 2018 році. Просто переконайтеся, що ви хочете, щоб архів перейшов до .zip, або він зробить купу файлів .rar.
Ерік Хепперл - CodeSlayer2010

5

Лише невелике оновлення відповіді одинадцятиріччя: Код нижче створює пакетний файл, на який можна скинути кілька елементів.

@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", який дозволить групувати поштові відбрані папки в окремі архіви

Однак якщо це зробити за допомогою контекстного меню, воно, на жаль, виконуватиме всі операції одночасно, і, як знає кожен, хто зробив чимало копіювання та розпакування, папки-папки працюють набагато швидше одна за одною, ніж усі відразу.

Якщо хтось знає спосіб виправити це в реєстрі, будь ласка, скажіть.

Перетягування вибраних папок на пакет буде робити їх одна за одною.


1
7z exe не був на моєму шляху, тому мені довелося трохи відредагувати ваш сценарій. "C: \ Program Files (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
+1 для заохочення лінивості за допомогою перетягування лол. Я щойно опублікував модифіковану версію @ http://superuser.com/a/1160047/678687
Enteleform

3

Порада: якщо у вас зображення є JPG, вони вже стиснуті. використовувати 7-Zip в режимі "архіву" без стиснення (рівень стиснення: зберігати), це значно прискорить процес.

навіть якщо ви використовуєте Ultra стиснення, ви навряд чи наберете 5%, безумовно, не варті зусиль.

Я думав з точки зору практично додавання вкладень.

я б не надсилав їх як вкладення електронної пошти. скоріше завантажте на так званий сервер хостингу одним клацанням (наприклад, drop.io, rs, mu, ms та ін., варіантів багато), а потім надішліть посилання для завантаження електронною поштою своїм друзям та сім’ї.


2
Однак їх буде простіше відправляти поштою.
Грак

я не думаю, що в завантаженні 475 або 500 МБ немає великої різниці, звичайно, недостатньо, щоб компенсувати час, необхідний для стиснення мільйона JPG з 'Ultra' :)

Я думав з точки зору практично додавання вкладень. Простіше додати один файл як вкладення замість 10. (коли кількість файлів зростає, це стає дратівливим).
Грак

Ось чому Моллі запропонував режим «архіву»; це заповнює їх у один файл, не витрачаючи часу на спроби стиснути щось, що вже стиснене ...
Адрієн

Це правда, я посилався на її останнє речення, але, тим не менш, навіть при малому зменшенні розміру файлів jpeg (а часом це не так вже й мало), все-таки варто. Час, витрачений на стиснення, набагато менше, ніж витрачає час на його завантаження, скажімо, gmail або якусь іншу пошту (gmail має відносно великий розмір вкладення).
Грак

2

Я знайшов roryok відповіді «s , щоб бути дуже корисним, він надав 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 є можливість UNZIP кожного файлу у власну папку (* /), але не вистачає контекстних команд, щоб зробити протилежну дію, яку ви шукаєте.

Однак, я пам'ятаю, як робив цю річ, використовуючи winrar у минулому. Є варіант "унікальний архів на папку" або щось для цього.


-1

Отримайте Picasa та завантажте у веб-альбом Picasa. Тоді кожен може легко отримати фотографії в Інтернеті та переглянути їх. Можливо, навіть зможете завантажити оригінали (щоб ваша родина могла надрукувати більші версії)


Якщо ви думаєте, що люди будуть задоволені завантаженням та вилученням поштових файлів, я думаю, ви будете сумно розчаровані ... Веб-інтерфейс набагато простіше для всіх, хто бере участь ....
Kurru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.