Jak zrobić 7-zip zrobić całą masę folderów

18

Mam kilka zdjęć, które musiałem przyciąć do 800 x 600 pikseli. To było łatwe do zrobienia, ale teraz muszę je przesłać, aby rodzina mogła je wszystkie zobaczyć.

Chodzi o to, że na zdjęciach jest to 500 MB. Postanowiłem po prostu skompresować osobne foldery, z których każdy zawiera prawie taką samą liczbę zdjęć. W ten sposób mogę przesłać kilka każdego dnia. Wykonanie tego ręcznie jest bardzo długą i ciężką pracą. Zastanawiam się, czy istnieje sposób, aby 7-suwak obsługiwał każdy folder osobno?

Myślę, że będę potrzebować pliku wsadowego, aby to zrobić, ale nie jestem z tym dobry. Wszystko umieściłem w jednym folderze. W różnych podfolderach znajdują się zdjęcia. Potrzebne jest spakowanie zawartości tego folderu. Nie jestem pewien, czy mogę po prostu skompresować folder razem z nim. Wiem, że PHP ma moduł zip, po prostu nigdy z nim nie pracowałem, więc nie jestem pewien, czy poradzi sobie z tym, że zawartość zip jest folderem zawierającym elementy, a nie tylko elementy.

KdgDev
źródło
1
O ilu folderach mówisz? 7? 147? Jeśli nie jesteś dobry w plikach wsadowych, ale być może jest to dobra okazja, aby poradzić sobie z tym wyzwaniem. :)
JMD
Łącznie 105 folderów
KdgDev

Odpowiedzi:

25

Uruchom z wiersza polecenia, którego katalogiem roboczym jest My Pictureskatalog, to polecenie utworzy plik zip z zawartością każdego podkatalogu, pozostawiając wszystkie pliki zip w My Pictureskatalogu.

Edycja: Dodałem znaki cudzysłowu niezbędne do uwzględnienia katalogów ze spacjami w nazwach.

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

Ponadto: Następująca wersja nie umieści plików w podkatalogu w pliku zip, ale zamiast tego w katalogu głównym:

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

W systemie Windows 7 i nowszych

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

lub

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
jedenaście81
źródło
Próbowałem dodać folder 7-zip do ścieżki klasy, ale to nie działa. Jeśli użyję całego ciągu do zlokalizowania pliku wykonywalnego zamiast tylko 7z, to zadziała. Myślałem, że dodanie tego ciągu do ścieżki klasy powinno mieć ten sam efekt?
KdgDev
classpathGdzie Java szuka klas i bibliotek. google.com/search?q=classpath Najwyraźniej pomyliłeś to z miejscem, w pathktórym powłoka szuka plików wykonywalnych.
jedenaście81
Pytanie: skrypt działa, ale nie, gdy w nazwie folderu znajdują się spacje ...
KdgDev
Dziękuję za aktualizację. Czy w drugim skrypcie masz na myśli to, że zawartość zip zostanie „spłaszczona”?
KdgDev
6
Działa to dla mnie świetnie, chociaż musiałem zmienić %%dna, %dponieważ moje okno Win 7 skarżyło się, że nazwa var jest zbyt długa, zgłaszając błąd „%% d nieoczekiwanie w tym czasie”.
Benjam
7

Nie mogłem uruchomić wiersza polecenia, zamiast tego pobrałem WinRAR, a mtone miał rację - WinRAR ma opcję spakowania wielu folderów do swoich oddzielnych plików ZIP.

Np. C:\Files\Fables 01Do C:\Files\Fables 01.zipi C:\Files\Fables 02do C:\Files\Fables 02.zip.

W WinRAR otwórz folder zawierający foldery, które chcesz spakować, a następnie wykonaj następujące kroki:

  • Wybierz wszystkie foldery, które chcesz spakować / spakować
  • Kliknij „DODAJ” lub Alt+ Alub Polecenia -> „Dodaj pliki do archiwum”
  • Wybierz RAR lub ZIP
  • przejdź do zakładki „Pliki”
  • Zaznacz „Umieść każdy plik w osobnym archiwum” w polu Archiwum

Gdy masz już inne ustawienia, które lubisz, naciśnij OK i boom: wiele plików ZIP z wielu folderów. Działa to o wiele łatwiej niż wiersz poleceń 7zip.

użytkownik134042
źródło
Mimo że jest napisane „każdy plik”, to pole wyboru działa również z folderami.
dhaupin
1
Ze wszystkich proponowanych tutaj rozwiązań to jedno działało dla mnie najlepiej w 2018 roku. Upewnij się tylko, czy chcesz, aby archiwum zostało rozpakowane .zip, czy zamiast tego utworzy kilka plików .rar.
Eric Hepperle - CodeSlayer2010
5

Wystarczy niewielka aktualizacja odpowiedzi jedenaście81: Poniższy kod tworzy plik wsadowy, do którego można upuścić wiele elementów.

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

Ten plik wsadowy można następnie dodać do menu kontekstowego za pośrednictwem rejestru:

  1. utwórz nowy klucz w [HKEY_CLASSES_ROOT \ Folder \ shell], nazwij go cmd1
  2. Edytuj wartość ciągu i nazwij ją „Batch Zip”
  3. utwórz kolejny nowy klucz pod tym kluczem i wywołaj go
  4. Zmień wartość tego na swoją ścieżkę, używając podwójnych ukośników

Na przykład mój wpis to „C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat” „% 1”

Po wykonaniu tej czynności w menu kontekstowym pojawi się wpis „Batch Zip”, który spakuje wszystkie wybrane foldery do osobnych archiwów

Jeśli jednak zrobisz to za pomocą menu kontekstowego, niestety wszystkie operacje zostaną uruchomione jednocześnie, a ponieważ każdy, kto wykonał dużo rozpakowywania i rozpakowywania, będzie wiedział, spakowanie folderów działa o wiele szybciej jeden po drugim niż wszystkie naraz.

Jeśli ktoś zna sposób, aby to naprawić w rejestrze, proszę powiedzieć.

Przeciągnięcie wybranych folderów do partii zrobi je jeden po drugim.

roryok
źródło
1
Exe 7z nie było na mojej ścieżce, więc musiałem nieco edytować twój skrypt. „C: \ Program Files (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan
1
+1 za zachęcanie do lenistwa za pomocą drag & drop lol. Właśnie opublikowałem zmodyfikowaną wersję @ http://superuser.com/a/1160047/678687
Enteleform
3

Wskazówka: jeśli obrazy są plikami JPG, są już skompresowane. użyj 7-Zip w trybie „archiwizacji” bez kompresji (poziom kompresji: zapisz), to znacznie przyspieszy proces.

nawet jeśli użyjesz kompresji Ultra, prawie nie zyskasz 5%, na pewno nie warte wysiłku.

Myślałem o praktycznie dodaniu załączników.

nie wysłałbym ich jako załącznika e-mail. raczej prześlij na tak zwany serwer hostingowy jednym kliknięciem (np. drop.io, rs, mu, ms itp., wybór jest duży), a następnie wyślij link do pobrania e-mailem do znajomych i rodziny.


źródło
2
Łatwiej będzie je jednak wysłać pocztą.
Gawron
nie sądzę, że jest duża różnica w przesyłaniu 475 lub 500 MB, z pewnością nie wystarczy, aby nadrobić czas potrzebny na skompresowanie gazillionowego JPG za pomocą „Ultra” :)
Myślałem o praktycznie dodaniu załączników. Łatwiej jest dodać jeden plik jako załącznik zamiast 10. (gdy liczba plików rośnie, staje się to denerwujące).
Gawron
Dlatego Molly zaproponowała tryb „archiwizacji”; umieszcza je wszystkie w jednym pliku, bez marnowania czasu na kompresowanie czegoś, co już zostało skompresowane ...
Adrien
To prawda, że ​​odwoływałem się do jej ostatniego zdania, ale mimo to nawet przy niewielkim zmniejszeniu rozmiaru plików jpeg (a czasami tak naprawdę nie jest tak małe), nadal warto. Czas poświęcony na kompresję jest znacznie krótszy niż czas przesłania go, powiedzmy, Gmaila lub innej poczty (Gmail ma względnie duży rozmiar załącznika).
Rook
2

Znalazłem roryok „s odpowiedź jest bardzo pomocny, pod warunkiem, że batch scriptza Windowsktóry pozwala drag-&-dropplików do szybkiego, automatycznego archiwizowania.


Aby użyć tego skryptu, po prostu zapisz go z .batrozszerzeniem, a następnie przeciągnij i upuść pliki i / lub foldery do pliku wsadowego ( lub skrótu do pliku wsadowego ).

.zippliki zostaną utworzone w tym samym katalogu, co pliki źródłowe.
( chociaż miejsce docelowe można zmienić w skrypcie @archivePath )


Niektóre aktualizacje, które wprowadziłem, aby poprawić łatwość dostosowywania i ogólną funkcjonalność:

  • dodano nazwane zmienne
  • zaimplementowano forpętlę, która iteruje podane argumenty
    ( wraz z delayedexpansionzezwalaniem na zmienne środowiska wykonawczego )
  • dodane ifwarunki do rozróżnienia filesifolders
    • umożliwia to bezpośrednie dodawanie zawartości folderu do archiwum zamiast zamykania folderu nadrzędnego w archiwum
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • dodano dziennik błędów, aby wyświetlić instancje zakończone niepowodzeniem lub komunikat o powodzeniu, jeśli nie wystąpiły błędy

@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
źródło
1

7-zip ma opcję rozpakowania każdego pliku do własnego folderu (* /), ale brakuje mu poleceń kontekstowych, aby wykonać odwrotną akcję, której szukasz.

To powiedziawszy, pamiętam, że robiłem to dokładnie za pomocą WinRAR w przeszłości. Istnieje opcja „unikalne archiwum na folder” lub coś podobnego.

mtone
źródło
-1

Pobierz Picasę i prześlij do albumu internetowego Picasy. Dzięki temu wszyscy mogą łatwo przeglądać zdjęcia w Internecie i przeglądać je. Może być nawet w stanie przesłać oryginały (aby Twoja rodzina mogła wydrukować większe wersje)

Kurru
źródło
Jeśli uważasz, że ludzie będą zadowoleni z pobierania i rozpakowywania plików zip, myślę, że będziesz smutno rozczarowany ... Interfejs internetowy jest znacznie łatwiejszy dla wszystkich zaangażowanych ...
Kurru