วิธีการทำ 7-zip ทำได้ทั้งโฟลเดอร์


18

ฉันได้รับรูปภาพจำนวนมากที่ฉันต้องครอบตัดเป็น 800x600 พิกเซล ทำได้ง่าย แต่ตอนนี้ฉันต้องอัปโหลดเพื่อให้ครอบครัวสามารถเห็นพวกเขาทั้งหมด

สิ่งนี้คือ 500MB ในรูปภาพ ฉันตัดสินใจที่จะซิปโฟลเดอร์แยกต่างหากซึ่งแต่ละไฟล์มีรูปภาพเกือบเท่ากัน วิธีนี้ฉันสามารถอัปโหลดสองสามวันในแต่ละ การทำเช่นนี้ด้วยตนเองเป็นงานที่ยาวนานและหนักหน่วง ฉันสงสัยว่ามีวิธีที่จะทำให้ 7-zip จัดการแต่ละโฟลเดอร์แยกกันหรือไม่?

ฉันคิดว่าฉันต้องการไฟล์แบตช์เพื่อทำมัน แต่ฉันไม่เก่ง ฉันใส่ทุกอย่างไว้ในโฟลเดอร์เดียว ในโฟลเดอร์ย่อยต่าง ๆ เป็นที่ตั้งของรูปภาพ สิ่งที่ฉันต้องการสำหรับการบีบอัดเนื้อหาของโฟลเดอร์นั้น ฉันไม่แน่ใจว่าฉันจะซิปโฟลเดอร์พร้อมกับมันได้ไหม ฉันรู้ว่า PHP มีโมดูล zip ฉันไม่เคยทำงานด้วยดังนั้นฉันจึงไม่แน่ใจว่าจะสามารถจัดการกับความจริงที่ว่าเนื้อหาของ zip เป็นโฟลเดอร์ที่มีรายการแทนที่จะเป็นแค่รายการ


1
คุณพูดถึงโฟลเดอร์กี่โฟลเดอร์ 7? 147? หากคุณไม่เก่งเรื่องแบตช์ไฟล์ แต่บางทีนี่อาจเป็นโอกาสที่ดีที่จะจัดการกับความท้าทายนั้น :)
JMD

ผลรวม 105 โฟลเดอร์
KdgDev

คำตอบ:


25

เรียกใช้จากพรอมต์คำสั่งที่มีไดเรกทอรีการทำงานเป็นไดเรกทอรีของคุณMy Picturesคำสั่งนี้จะสร้างไฟล์ซิปของเนื้อหาของแต่ละไดเรกทอรีย่อยโดยปล่อยให้ไฟล์ซิปทั้งหมดในMy Picturesไดเรกทอรีของคุณ

แก้ไข:ฉันได้เพิ่มเครื่องหมายคำพูดที่จำเป็นเพื่ออนุญาตให้ไดเรกทอรีที่มีช่องว่างในชื่อของพวกเขา

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

นอกจากนี้:รุ่นต่อไปนี้จะไม่ใส่ไฟล์ในไดเรกทอรีย่อยภายในของไฟล์ซิป แต่ในรากของมัน

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 ใน classpath ของฉันแล้ว แต่มันไม่ทำงาน ถ้าฉันใช้สตริงทั้งหมดเพื่อค้นหาไฟล์ที่เรียกใช้งานได้แทนเพียงแค่ 7z มันก็ใช้ได้ ฉันว่าการเพิ่มสตริงนั้นในเส้นทางคลาสควรมีผลเหมือนกันหรือไม่
KdgDev

นี่classpathคือที่ที่ Java มองหาคลาสและไลบรารี google.com/search?q=classpath เห็นได้ชัดว่าคุณสับสนกับpathตำแหน่งที่เชลล์ค้นหาไฟล์เรียกทำงาน
eleven81

คำถาม: สคริปต์ทำงานได้ แต่ไม่ใช่เมื่อมีช่องว่างในชื่อโฟลเดอร์ ...
KdgDev

ขอบคุณสำหรับการอัพเดท. ด้วยสคริปต์ที่สองคุณหมายความว่าเนื้อหาของ zip จะ "แบน" หรือไม่
KdgDev

6
นี้ทำงานที่ดีสำหรับฉัน แต่ฉันต้องเปลี่ยน%%dไป%dเป็นของฉัน Win 7 กล่องบ่นเกี่ยวกับชื่อ var เป็นเวลานานเกินไปขว้างปา "%% d ที่ไม่คาดคิดในเวลานี้" ความผิดพลาด
Benjam

7

ฉันไม่สามารถใช้งานบรรทัดคำสั่งได้ แต่ฉันดาวน์โหลด WinRAR และmtoneถูกต้อง - WinRAR มีตัวเลือกให้ซิปหลายโฟลเดอร์ลงในไฟล์ ZIP แยกต่างหาก

เช่นC:\Files\Fables 01เข้าC:\Files\Fables 01.zipและออกเป็นC:\Files\Fables 02C:\Files\Fables 02.zip

ด้วย WinRAR ให้เปิดโฟลเดอร์ที่มีโฟลเดอร์ที่คุณต้องการ zip จากนั้นทำตามขั้นตอนเหล่านี้:

  • เลือกโฟลเดอร์ทั้งหมดที่คุณต้องการซิป / rared
  • คลิก "เพิ่ม" หรือAlt+ Aหรือคำสั่ง -> "เพิ่มไฟล์เพื่อเก็บถาวร"
  • เลือก RAR หรือ ZIP
  • ไปที่แท็บ "ไฟล์"
  • ทำเครื่องหมาย "ใส่แต่ละไฟล์เพื่อแยกไฟล์เก็บถาวร" ใต้ช่องเก็บ

เมื่อคุณมีการตั้งค่าอื่น ๆ ที่คุณต้องการแก้ไขแล้วกด OK และ boom: ไฟล์ ZIP หลายไฟล์ของหลาย ๆ โฟลเดอร์ สิ่งนี้ทำงานได้ง่ายกว่า command line 7zip


แม้ว่าจะมีข้อความระบุว่า "แต่ละไฟล์" ช่องทำเครื่องหมายนี้ทำงานกับโฟลเดอร์ได้เช่นกัน
dhaupin

1
จากวิธีแก้ปัญหาที่เสนอทั้งหมดที่นี่อันนี้ทำงานได้ดีที่สุดสำหรับฉันในปี 2561 เพียงตรวจสอบให้แน่ใจว่าคุณต้องการเก็บถาวรเป็น. zip หรือไม่ก็จะทำให้ไฟล์. rar เป็นกลุ่มแทน
Eric Hepperle - CodeSlayer2010

5

เพียงอัปเดตเล็กน้อยสำหรับคำตอบของ 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' ซึ่งจะทำการรวบรวมโฟลเดอร์ที่เลือกไว้ในไฟล์เก็บถาวรแยกต่างหาก

อย่างไรก็ตามหากคุณทำสิ่งนี้ผ่านเมนูบริบทมันจะทำการดำเนินการทั้งหมดไปพร้อม ๆ กันและเป็นใครก็ตามที่ทำการซิปมากและการคลายซิปจะทราบได้การซิปโฟลเดอร์จะทำงานได้เร็วกว่ากันในทันที

หากใครรู้วิธีการแก้ไขในรีจิสทรีโปรดบอก

การลากโฟลเดอร์ที่เลือกไปยังแบทช์จะทำทีละโฟลเดอร์


1
exe 7z ไม่ได้อยู่ในเส้นทางของฉันดังนั้นฉันจึงต้องแก้ไขสคริปต์ของคุณเล็กน้อย "C: \ Program ไฟล์ (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
+1 สำหรับการส่งเสริมความขี้เกียจด้วยการลากและวาง lol ฉันเพิ่งโพสต์รุ่นที่แก้ไขแล้ว @ http://superuser.com/a/1160047/678687
Enteleform

3

เคล็ดลับ: หากคุณเป็นรูปภาพ JPG จะถูกบีบอัดไว้แล้ว ใช้ 7-Zip ในโหมด 'เก็บถาวร' โดยไม่มีการบีบอัด (ระดับการบีบอัด: ที่เก็บ) ซึ่งจะเพิ่มความเร็วในกระบวนการอย่างมาก

แม้ว่าคุณจะใช้การบีบอัดแบบอัลตร้าคุณจะได้รับ 5% แทบจะไม่คุ้มค่ากับความพยายาม

ฉันคิดในแง่ของการเพิ่มไฟล์แนบ

ฉันจะไม่ส่งสิ่งที่แนบมาเป็นอีเมล ค่อนข้างอัปโหลดไปยังเซิร์ฟเวอร์ one-click-hosting ที่เรียกว่า (เช่น drop.io, rs, mu, ms, ฯลฯ มีให้เลือกมากมาย) จากนั้นส่งลิงค์ดาวน์โหลดผ่านอีเมลไปยังเพื่อนและครอบครัวของคุณ


2
พวกเขาจะง่ายต่อการส่งเมล์
โกง

ฉันไม่คิดว่าจะมีความแตกต่างอย่างมากในการอัปโหลด 475 หรือ 500 MB แน่นอนว่าไม่เพียงพอที่จะชดเชยเวลาที่ต้องใช้ในการบีบอัด JPG จำนวนมหาศาลด้วย 'Ultra' :)

ฉันคิดในแง่ของการเพิ่มไฟล์แนบ ง่ายกว่าที่จะเพิ่มหนึ่งไฟล์เป็นสิ่งที่แนบมาแทน 10 (เมื่อจำนวนไฟล์เพิ่มขึ้นสิ่งนี้จะน่ารำคาญ)
โกง

นี่คือเหตุผลที่มอลลี่แนะนำโหมด "เก็บถาวร" มันยัดพวกมันทั้งหมดไว้ในไฟล์เดียวโดยไม่ต้องเสียเวลาพยายามบีบอัดบางสิ่งที่ถูกบีบอัดไปแล้ว ...
Adrien

มันเป็นความจริงฉันกำลังอ้างอิงถึงประโยคสุดท้ายของเธอ แต่ถึงกระนั้นแม้จะมีขนาดเล็กลงในไฟล์ 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 จากนั้นทุกคนสามารถรับภาพถ่ายออนไลน์ได้อย่างง่ายดายและดูพวกเขาอาจอัปโหลดภาพต้นฉบับได้ (เพื่อให้ครอบครัวของคุณสามารถพิมพ์เวอร์ชันที่ใหญ่กว่า)


หากคุณคิดว่าผู้คนจะมีความสุขกับการดาวน์โหลดและแตกไฟล์ zip ฉันคิดว่าคุณจะผิดหวังอย่างมาก ... ส่วนต่อประสานเว็บนั้นง่ายกว่าสำหรับทุกคนที่เกี่ยวข้อง ....
Kurru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.