Cara membuat 7-zip lakukan banyak folder

18

Saya punya banyak gambar yang harus saya potong menjadi 800x600 piksel. Itu mudah dilakukan, tetapi sekarang saya harus mengunggahnya sehingga keluarga dapat melihat semuanya.

Masalahnya, ini adalah 500MB dalam gambar. Saya memutuskan untuk hanya membuka folder terpisah, yang masing-masing berisi jumlah gambar yang hampir sama. Dengan cara ini saya dapat mengunggah pasangan setiap hari. Melakukan ini secara manual adalah pekerjaan yang sangat panjang dan sulit. Saya ingin tahu apakah ada cara untuk membuat 7-zip menangani setiap folder secara individual?

Saya pikir saya akan memerlukan file batch untuk melakukannya, tapi saya tidak pandai dengan itu. Saya telah meletakkan semuanya di bawah satu folder. Di berbagai subfolder adalah tempat gambar berada. Yang saya butuhkan adalah agar isi folder itu di-zip. Saya tidak yakin apakah saya bisa zip folder bersama dengan itu. Saya tahu PHP memiliki modul zip, saya tidak pernah bekerja dengannya, jadi saya tidak yakin apakah itu dapat menangani fakta bahwa konten zip adalah folder yang berisi item, bukan hanya item.

KdgDev
sumber
1
Berapa banyak folder yang Anda bicarakan? 7? 147? Jika Anda tidak pandai dengan file batch, tapi mungkin ini adalah kesempatan yang baik untuk mengatasi tantangan itu. :)
JMD
105 total folder
KdgDev

Jawaban:

25

Jalankan dari prompt perintah yang direktori kerjanya adalah direktori Anda My Pictures, perintah ini akan membuat file zip dari isi setiap subdirektori, meninggalkan semua file zip di My Picturesdirektori Anda .

Sunting: Saya telah menambahkan tanda kutip yang diperlukan untuk memungkinkan direktori dengan spasi di namanya.

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

Juga: Versi berikut ini tidak akan meletakkan file di subdirektori di dalam file zip, melainkan di root:

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

Di Windows 7 dan di atasnya

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

atau

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
sebelas81
sumber
Saya sudah mencoba menambahkan folder 7-zip ke classpath saya, tetapi tidak berfungsi. Jika saya menggunakan seluruh string untuk menemukan executable, bukan hanya 7z, itu berfungsi. Saya pikir menambahkan string itu ke jalur kelas harus memiliki efek yang sama?
KdgDev
Di classpathsinilah Java mencari kelas dan perpustakaan. google.com/search?q=classpath Anda tampaknya bingung dengan di pathmana shell mencari executable.
sebelas81
Pertanyaan: skrip berfungsi, tetapi tidak ketika ada spasi di folder-nama ...
KdgDev
Terima kasih atas pembaruannya. Dengan skrip kedua, maksud Anda bahwa isi zip akan "diratakan"?
KdgDev
6
Ini bekerja besar bagi saya, meskipun saya harus mengubah %%duntuk %dsebagai saya kotak Win 7 mengeluh tentang nama var terlalu lama melemparkan "%% d tak terduga pada kali ini" kesalahan.
Benjam
7

Saya tidak bisa mendapatkan baris perintah untuk bekerja, sebaliknya saya mengunduh WinRAR dan mtone benar - WinRAR memang memiliki opsi untuk zip beberapa folder ke file ZIP terpisah mereka sendiri.

Misalnya C:\Files\Fables 01ke C:\Files\Fables 01.zip, dan C:\Files\Fables 02ke C:\Files\Fables 02.zip.

Dengan WinRAR, buka Folder yang berisi folder yang ingin Anda zip, lalu ikuti langkah-langkah ini:

  • Pilih semua folder yang ingin Anda zip / rared
  • Klik "Tambahkan" atau Alt+ Aatau Perintah -> "Tambahkan file ke Arsip"
  • Pilih RAR atau ZIP
  • buka tab "File"
  • Centang "Letakkan setiap file untuk memisahkan arsip" di bawah kotak Arsip

Ketika Anda memiliki pengaturan lain yang Anda suka diperbaiki, tekan OK dan boom: beberapa file ZIP dari beberapa folder. Ini bekerja jauh lebih mudah daripada baris perintah 7zip.

pengguna134042
sumber
Meskipun tertulis "setiap file", kotak centang ini juga berfungsi dengan folder.
dhaupin
1
Dari semua solusi yang diusulkan di sini, yang ini bekerja paling baik untuk saya pada tahun 2018. Pastikan untuk memeriksa apakah Anda ingin arsipnya .zip atau itu akan membuat banyak file .rar.
Eric Hepperle - CodeSlayer2010
5

Hanya sedikit pembaruan dari jawaban sebelas81: Kode di bawah ini membuat file batch yang mana beberapa item dapat dijatuhkan.

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

File batch ini kemudian dapat ditambahkan ke menu konteks melalui registri:

  1. buat kunci baru di bawah [HKEY_CLASSES_ROOT \ Folder \ shell], sebut saja cmd1
  2. Edit nilai string dan beri nama 'Batch Zip'
  3. buat kunci baru lain di bawah yang ini dan sebut itu perintah
  4. Ubah nilai ini ke jalur Anda, dengan garis miring ganda

Jadi misalnya, entri saya adalah "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Setelah Anda melakukan ini, Anda akan memiliki entri dalam menu konteks Anda untuk 'Batch Zip' yang akan batch zip folder yang dipilih ke dalam arsip terpisah

Namun, jika Anda melakukan ini melalui menu konteks, sayangnya itu akan menjalankan semua operasi secara bersamaan, dan siapa pun yang telah melakukan banyak zip dan unzip akan tahu, folder zip bekerja jauh lebih cepat satu demi satu daripada sekaligus.

Jika ada yang tahu cara untuk memperbaikinya dalam registri, mohon beri tahu.

Menyeret folder yang dipilih ke kumpulan akan melakukannya satu demi satu.

roryok
sumber
1
Exe 7z tidak ada di jalur saya dan saya harus mengedit skrip Anda sedikit. "C: \ Program Files (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan
1
+1 untuk mendorong kemalasan dengan drag & drop lol. Saya baru saja memposting versi modifikasi @ http://superuser.com/a/1160047/678687
Enteleform
3

Kiat: jika gambar Anda adalah JPG, gambar tersebut sudah dikompres. gunakan 7-Zip dalam mode 'arsip' tanpa kompresi (tingkat kompresi: toko) ini akan mempercepat proses sangat.

bahkan jika Anda menggunakan kompresi Ultra Anda tidak akan mendapatkan 5%, tentu saja tidak sepadan dengan usaha.

Saya sedang berpikir dalam hal praktis menambahkan lampiran.

saya tidak akan mengirim mereka sebagai lampiran email. alih-alih unggah ke server hosting satu klik yang disebut (mis. drop.io, rs, mu, ms, dll., pilihannya banyak) dan kemudian kirim tautan unduhan melalui email ke teman dan keluarga Anda.


sumber
2
Mereka akan lebih mudah mengirim email.
Benteng
saya tidak berpikir ada banyak perbedaan dalam mengunggah 475 atau 500 MB, tentu saja tidak cukup untuk menebus waktu yang diperlukan untuk mengompres trilyun JPG dengan 'Ultra' :)
Saya sedang berpikir dalam hal praktis menambahkan lampiran. Lebih mudah untuk menambahkan satu file sebagai lampiran daripada 10. (ketika jumlah file bertambah, ini menjadi menjengkelkan).
Benteng
Itulah sebabnya Molly menyarankan mode "arsip"; itu memasukkan semuanya ke dalam satu file, tanpa membuang waktu mencoba untuk mengompres sesuatu yang sudah dikompresi ...
Adrien
Memang benar saya merujuk pada kalimat terakhirnya, tetapi meskipun demikian, bahkan dengan pengurangan kecil dalam ukuran file jpeg (dan kadang-kadang tidak terlalu kecil, sebenarnya), itu masih sepadan. Waktu yang dihabiskan untuk kompresi jauh lebih sedikit daripada waktu yang dihabiskan untuk mengunggahnya, katakanlah, gmail atau surat lain (gmail memiliki batas ukuran lampiran yang relatif besar).
Benteng
2

Saya menemukan jawaban roryok sangat membantu, ia menyediakan batch scriptuntuk Windowsyang memungkinkan Anda ke drag-&-dropfile untuk pengarsipan otomatis yang cepat.


Untuk menggunakan skrip ini, cukup simpan dengan .batekstensi, dan kemudian Anda dapat menyeret - & - meletakkan file dan / atau folder ke file batch ( atau cara pintas ke file batch ).

.zipfile akan dibuat di direktori yang sama dengan file sumber.
( meskipun tujuan dapat diubah dalam skrip @archivePath )


Beberapa pembaruan yang saya buat untuk meningkatkan kemudahan penyesuaian & fungsionalitas keseluruhan:

  • menambahkan variabel bernama
  • menerapkan forloop yang berulang melalui argumen yang diberikan
    ( bersama dengan delayedexpansionuntuk memungkinkan variabel runtime )
  • menambahkan ifkondisi untuk membedakan files&folders
    • ini memungkinkan konten folder ditambahkan ke arsip secara langsung daripada melampirkan folder induk dalam arsip
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • menambahkan log kesalahan untuk menampilkan contoh yang gagal atau menampilkan pesan yang berhasil jika tidak ada kesalahan

@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
sumber
1

7-zip memiliki opsi untuk UNZIP setiap file ke foldernya sendiri (* /), tetapi tidak memiliki perintah konteks untuk melakukan tindakan sebaliknya yang Anda cari.

Yang mengatakan, saya ingat melakukan hal yang tepat ini menggunakan winrar di masa lalu. Ada opsi "arsip unik per folder" atau sesuatu seperti itu.

mtone
sumber
-1

Dapatkan picasa dan unggah ke album web picasa. Maka semua orang dapat dengan mudah mendapatkan foto secara online dan melihatnya. Bahkan dapat mengunggah foto asli (sehingga keluarga Anda dapat mencetak versi yang lebih besar)

Kurru
sumber
Jika Anda pikir orang akan senang mengunduh dan mengekstrak file zip, saya pikir Anda akan sangat kecewa ... Antarmuka web jauh lebih mudah untuk semua orang yang terlibat ....
Kurru