Cách tạo 7-zip để thực hiện một loạt các thư mục


18

Tôi có một loạt các hình ảnh mà tôi phải cắt thành 800x600 pixel. Điều đó đã được thực hiện dễ dàng, nhưng bây giờ tôi phải tải chúng lên để gia đình có thể nhìn thấy tất cả.

Điều đó là, đây là 500 MB trong hình ảnh. Tôi quyết định chỉ cần nén các thư mục riêng biệt, mỗi thư mục chứa một lượng hình ảnh gần như bằng nhau. Bằng cách này tôi có thể tải lên một vài ngày mỗi. Làm điều này bằng tay là một công việc rất dài và khó khăn. Tôi tự hỏi nếu có một cách để làm cho 7-zip xử lý từng thư mục riêng lẻ?

Tôi nghĩ rằng tôi sẽ cần một tệp bó để làm điều đó, nhưng tôi không tốt với điều đó. Tôi đã đặt mọi thứ trong một thư mục. Trong các thư mục con khác nhau là nơi các hình ảnh được đặt. Những gì tôi cần là cho nội dung của thư mục đó được nén. Tôi không chắc chắn nếu tôi chỉ có thể nén thư mục cùng với nó. Tôi biết PHP có một mô-đun zip, tôi chưa bao giờ làm việc với nó, vì vậy tôi không chắc liệu nó có thể xử lý thực tế rằng nội dung của zip là một thư mục chứa các mục hay không, thay vì chỉ các mục.


1
Có bao nhiêu thư mục bạn đang nói về? 7? 147? Nếu bạn không giỏi với các tệp bó, nhưng có lẽ đây là cơ hội tốt để giải quyết thách thức đó. :)
JMD

Tổng cộng 105 thư mục
KdgDev

Câu trả lời:


25

Chạy từ một dấu nhắc lệnh có thư mục làm việc là thư mục của bạn My Pictures, lệnh này sẽ tạo một tệp zip chứa nội dung của mỗi thư mục con, để lại tất cả các tệp zip trong My Picturesthư mục của bạn .

Chỉnh sửa: Tôi đã thêm các dấu ngoặc kép cần thiết để cho phép các thư mục có khoảng trắng trong tên của chúng.

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

Ngoài ra: Phiên bản sau sẽ không đặt các tệp trong thư mục con bên trong tệp zip, mà thay vào đó, trong thư mục gốc của nó:

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

Trong Windows 7 trở lên

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

hoặc là

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

Tôi đã thử thêm thư mục 7-zip vào đường dẫn lớp của mình, nhưng nó không hoạt động. Nếu tôi sử dụng toàn bộ chuỗi để xác định vị trí thực thi thay vì chỉ 7z, thì nó hoạt động. Tôi mặc dù việc thêm chuỗi đó vào đường dẫn lớp sẽ có tác dụng tương tự?
KdgDev

Đây classpathlà nơi Java tìm kiếm các lớp và thư viện. google.com/search?q= classpath Bạn rõ ràng đã nhầm lẫn rằng với pathcái vỏ tìm kiếm các tệp thực thi.
eleven81

Câu hỏi: tập lệnh hoạt động, nhưng không phải khi có khoảng trắng trong tên thư mục ...
KdgDev

Cảm ơn các cập nhật. Với tập lệnh thứ hai, bạn có nghĩa là nội dung của zip sẽ bị "làm phẳng"?
KdgDev

6
Điều này rất tốt cho tôi, mặc dù tôi đã phải đổi %%dthành %dhộp Win 7 của mình phàn nàn về việc tên var quá dài gây ra lỗi "%% d bất ngờ tại thời điểm này".
Stewam

7

Tôi không thể làm cho dòng lệnh hoạt động, thay vào đó tôi đã tải xuống WinRAR và nhạc chuông đã đúng - WinRAR có một tùy chọn để nén nhiều thư mục vào các tệp ZIP riêng của chúng.

Ví dụ C:\Files\Fables 01vào C:\Files\Fables 01.zip, và C:\Files\Fables 02vào C:\Files\Fables 02.zip.

Với WinRAR, hãy mở Thư mục chứa các thư mục bạn muốn nén, sau đó làm theo các bước sau:

  • Chọn tất cả các thư mục bạn muốn nén / rared
  • Nhấp vào "THÊM" hoặc Alt+ Ahoặc Lệnh -> "Thêm tệp vào Lưu trữ"
  • Chọn RAR hoặc ZIP
  • đi tới tab "Tệp"
  • Kiểm tra "Đặt từng tệp để lưu trữ riêng biệt" trong hộp Lưu trữ

Khi bạn đã sửa bất kỳ cài đặt nào khác mà bạn thích, hãy nhấn OK và boom: nhiều tệp ZIP của nhiều thư mục. Điều này làm việc dễ dàng hơn nhiều so với dòng lệnh 7zip.


Mặc dù nó nói "mỗi tệp" hộp kiểm này cũng hoạt động với các thư mục.
dhaupin

1
Trong tất cả các giải pháp được đề xuất ở đây, giải pháp này hoạt động tốt nhất cho tôi vào năm 2018. Chỉ cần chắc chắn kiểm tra xem bạn muốn lưu trữ thành .zip hay nó sẽ tạo ra một loạt các tệp .rar thay thế.
Eric Hepperle - CodeSlayer2010

5

Chỉ cần một bản cập nhật nhỏ của câu trả lời của eleven81: Đoạn mã dưới đây tạo ra một tệp bó mà nhiều mục có thể được thả vào.

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

Tập tin bó này sau đó có thể được thêm vào menu ngữ cảnh thông qua sổ đăng ký:

  1. tạo khóa mới trong [HKEY_CLASSES_ROOT \ Folder \ shell], gọi nó là cmd1
  2. Chỉnh sửa giá trị chuỗi và gọi nó là 'Batch Zip'
  3. tạo một khóa mới theo cái này và gọi nó là lệnh
  4. Thay đổi giá trị của điều này thành đường dẫn của bạn, với dấu gạch chéo thoát kép

Vì vậy, ví dụ: mục nhập của tôi là "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Khi bạn làm điều này, bạn sẽ có một mục trong menu ngữ cảnh của mình cho 'Batch Zip', sẽ nén zip bất kỳ thư mục đã chọn nào vào kho lưu trữ riêng

Tuy nhiên, nếu bạn thực hiện việc này thông qua menu ngữ cảnh, nó sẽ không may chạy tất cả các hoạt động đồng thời và vì bất kỳ ai đã thực hiện nhiều thao tác nén và giải nén sẽ biết, các thư mục nén hoạt động nhanh hơn rất nhiều lần.

Nếu bất cứ ai biết một cách để sửa lỗi này trong sổ đăng ký xin vui lòng cho biết.

Kéo các thư mục đã chọn vào lô sẽ thực hiện lần lượt từng thư mục.


1
Exz 7z không nằm trên đường của tôi và vì vậy tôi phải chỉnh sửa kịch bản của bạn một chút. "C: \ Tệp chương trình (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
+1 để khuyến khích sự lười biếng với kéo và thả lol. Tôi vừa đăng một phiên bản sửa đổi @ http://superuser.com/a/1160047/678687
Enteleform

3

Mẹo: nếu hình ảnh của bạn là JPG, chúng đã được nén. sử dụng 7-Zip trong chế độ 'lưu trữ' mà không nén (mức nén: lưu trữ) điều này sẽ tăng tốc quá trình rất nhiều.

ngay cả khi bạn sử dụng siêu nén, bạn sẽ khó đạt được 5%, chắc chắn không đáng để bỏ công sức.

Tôi đã suy nghĩ về mặt thực tế thêm các tệp đính kèm.

tôi sẽ không gửi chúng dưới dạng tệp đính kèm email. thay vì tải lên một máy chủ lưu trữ một lần nhấp (ví dụ: drop.io, rs, mu, ms, v.v., nhiều lựa chọn) và sau đó gửi liên kết tải xuống qua email cho bạn bè và gia đình của bạn.


2
Họ sẽ dễ dàng hơn để gửi thư, mặc dù.
Rook

Tôi không nghĩ có nhiều sự khác biệt trong việc tải lên 475 hoặc 500 MB, chắc chắn là không đủ để bù lại thời gian cần thiết để nén một lượng lớn JPG với 'Ultra' :)

Tôi đã suy nghĩ về mặt thực tế thêm các tệp đính kèm. Việc thêm một tệp dưới dạng tệp đính kèm thay vì 10. dễ dàng hơn (khi số lượng tệp tăng lên, điều này trở nên khó chịu).
Rook

Đó là lý do tại sao Molly đề xuất chế độ "lưu trữ"; nó nhét tất cả vào một tập tin mà không mất thời gian cố gắng nén thứ gì đó đã được nén ...
Adrien

Đúng là tôi đã tham gia vào câu cuối cùng của cô ấy, nhưng tuy nhiên, ngay cả với việc giảm kích thước nhỏ của các tệp jpeg (và đôi khi nó không quá nhỏ, thực sự), nó vẫn có giá trị. Chi phí thời gian cho việc nén ít hơn nhiều so với thời gian tải lên để giả sử, gmail hoặc một số thư khác (gmail có phụ cấp kích thước tệp đính kèm tương đối lớn).
Rook

2

Tôi thấy câu trả lời của roryok rất hữu ích, anh ấy đã cung cấp một batch scriptcho Windowsphép bạn drag-&-droplưu trữ các tệp để lưu trữ nhanh chóng, tự động.


Để sử dụng tập lệnh này, chỉ cần lưu tập tin với .batphần mở rộng và sau đó bạn có thể kéo - & - thả tệp và / hoặc thư mục vào tệp bó ( hoặc lối tắt đến tệp bó ).

.zipcác tệp sẽ được tạo trong cùng thư mục với các tệp nguồn.
( mặc dù đích có thể được thay đổi trong tập lệnh @archivePath )


Một số cập nhật tôi đã thực hiện để cải thiện dễ dàng tùy chỉnh & chức năng tổng thể:

  • thêm các biến được đặt tên
  • đã thực hiện một forvòng lặp lặp qua các đối số đã cho
    ( cùng với delayedexpansionviệc cho phép các biến thời gian chạy )
  • thêm ifđiều kiện để phân biệt files&folders
    • điều này cho phép nội dung thư mục được thêm trực tiếp vào kho lưu trữ thay vì kèm theo thư mục mẹ trong kho lưu trữ
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • đã thêm nhật ký lỗi để hiển thị các trường hợp thất bại hoặc hiển thị thông báo thành công nếu không có lỗi

@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 có một tùy chọn để UNZIP mỗi tệp vào thư mục riêng (* /), nhưng thiếu các lệnh ngữ cảnh để thực hiện hành động ngược lại mà bạn đang tìm kiếm.

Điều đó nói rằng, tôi nhớ làm điều này chính xác bằng cách sử dụng winrar trong quá khứ. Có một tùy chọn "lưu trữ duy nhất cho mỗi thư mục" hoặc một cái gì đó cho hiệu ứng đó.


-1

Nhận picasa và tải lên album web của picasa. Sau đó, mọi người có thể dễ dàng lấy ảnh trực tuyến và xem chúng. Thậm chí có thể tải lên bản gốc (để gia đình bạn có thể in các phiên bản lớn hơn)


Nếu bạn nghĩ mọi người sẽ hài lòng với việc tải xuống và giải nén các tệp zip thì tôi nghĩ bạn sẽ thất vọng một cách đáng buồn ... Giao diện web dễ dàng hơn nhiều cho mọi người tham gia ....
Kurru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.