ฉันจะสร้างไฟล์ zip แยกสำหรับแต่ละไฟล์ / ไดเรกทอรีที่เลือกใน 7zip ได้อย่างไร


30

นี่คือ zip ziper จาก Total Commander:

รูปภาพของไดอะล็อกบ็อกซ์ zip Commander รวม

อย่างไรก็ตามฉันต้องการใช้ 7zip packer ของฉัน เมื่อฉันเลือก 5 ไฟล์ฉันจะได้รับไฟล์. zip 5 ไฟล์แยกจากกันสำหรับแต่ละไฟล์ที่เลือก ฉันจะทำเช่นนั้นใน 7zip ได้อย่างไร

คำตอบ:


54

ฉันไม่แน่ใจว่าคุณสามารถทำสิ่งที่คุณแนะนำโดยใช้ส่วนต่อประสานผู้ใช้แบบกราฟิก แต่แน่นอนคุณสามารถจากบรรทัดคำสั่ง:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

คุณจะต้องเปลี่ยนไดเรกทอรี ( cdคำสั่ง) ไปยังF:\Downloadsไดเรกทอรีก่อนหรือไดเรกทอรีใด ๆ ที่คุณต้องการดำเนินการบีบอัดจำนวนมาก นอกจากนี้ยังง่ายพอที่จะแทนที่ * .exe หรือนามสกุลอื่น ๆ ที่คุณต้องการกรองเพื่อบีบอัดเอกสารเหล่านั้น

และแหวนถอดรหัสลับ:

  • %i เป็นตัวแปรที่เก็บชื่อไฟล์สำหรับแต่ละขั้นตอนในลูป
  • (*.*) เป็นเกณฑ์การคัดเลือกมันอาจเป็น * .exe หรือคล้ายกันได้อย่างง่ายดาย
  • 7z.exe เป็นรุ่นบรรทัดคำสั่งของ 7-Zip
  • %~ni - สิ่งนี้จะขยายตัวแปร% i เป็นเพียงชื่อไฟล์ - ไม่มีส่วนขยาย

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

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

สิ่งนี้ได้ผลเพราะสิ่งที่ดูเหมือนเวทมนตร์:

  • /F บอกให้ FOR วนซ้ำค่าที่ขยายใน ()
  • usebackq บอก FOR ว่าฉันจะส่งคำสั่งและใช้เอาต์พุตเพื่อทำซ้ำ
  • delims=?บอกให้ฉันรู้ว่าฉันต้องการแยกโทเค็นออกจากกัน?- อักขระผิดกฎหมายในชื่อไฟล์และไดเรกทอรี ฉันต้องการแค่โทเค็นเดียวเท่านั้น
  • /BในDIRเป็นรูปแบบเปลือย - เพียงแค่ชื่อ
  • /A:DในDIRสำหรับการ จำกัด ผลการค้นหาตามแอตทริบิวต์, D คือไดเรกทอรี

หากคุณต้องการแค็ปซูลภายในไฟล์แบตช์การเปลี่ยนแปลงอย่างเดียวที่คุณจะต้องทำคือการหลีกเลี่ยงตัวแปร% i:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"

ใช่ยกเว้นคุณเป็นไฟล์เก็บถาวร 7z ฉันต้องการไฟล์ zip! ดังนั้น% ~ ni.zip แทน
Grumpy ol 'Bear

ยังดีกว่าฉันต้องการ zip หรือ 7z ด้วยการบีบอัดแบบพิเศษ และบรรจุใน d: \ บรรจุ แต่จนถึงตอนนี้วิธีการของคุณใช้งานได้!
Grumpy ol 'Bear

1
เข้าใจแล้วขอบคุณ! สำหรับ% i IN ( . ) ทำ 7z.exe a "i: \ บรรจุ \% ~ ni.7z" "% i" -mx9
Grumpy ol 'Bear

โดยวิธีการที่คุณสามารถแสดงให้ฉันเห็นวิธีการทำในไฟล์แบทช์? ie sperate-archive.bat
Grumpy ol 'Bear

ขอบคุณและฉันจะเพิ่มทั้งโฟลเดอร์ลงในสคริปต์นั้นได้อย่างไร
Grumpy ol 'Bear

15

ฉันชอบคำตอบของ Goyuix อย่างไรก็ตามหากคุณใช้ Windows 7 (หรือติดตั้ง Power Shell) และใช้ 7-zip, 7za.exe รุ่นบรรทัดคำสั่งคุณสามารถเรียกใช้คำสั่งนี้ได้:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

นอกจากนี้คุณยังสามารถเปลี่ยน "dir" เป็น "dir * .exe" เพื่อเลือกไฟล์ที่ใช้งานได้เท่านั้น

สิ่งหนึ่งที่ดีเกี่ยวกับ Power Shell คือคุณกำลังทำงานกับวัตถุแทนที่จะเป็นสตริง ดังนั้นคุณจะได้รับที่เฉพาะเจาะจงจริงๆถ้าคุณต้องการ ตัวอย่างเช่น:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

โดยจะรวมเฉพาะไฟล์ที่:

  1. มีนามสกุล csv
  2. ขนาดน้อยกว่า 18,900 ไบต์
  3. แก้ไขล่าสุดในหรือหลัง 7/1/2011

แก้ไข หากคุณต้องการไฟล์ zip แทนไฟล์ 7-zip ให้ใช้zip.exe ของ InfoZipแทน


4
7-zip สามารถสร้างไฟล์ zip ได้ดูที่แฟล็ก -t ตัวอย่าง:7z a -tzip archive.zip *.exe
Goyuix

ตกลง $ _. BaseName $ _. ชื่อใช้งานได้ แต่ฉันจะทำอย่างไร $ _. BaseName $ _. ชื่อบนไดรฟ์อื่นในไดเรกทอรีอื่นได้อย่างไร พูดว่า f: \ test \ file1.7z เป็นต้น
Grumpy ol 'Bear

0

คุณสามารถดาวน์โหลดและติดตั้งปลั๊กอิน 7zip สำหรับ Total Commander จากhttp://www.ghisler.com/plugins.htm เมื่อคุณทำเช่นนั้นที่ด้านขวาของหน้าต่างจากภาพหน้าจอของคุณจะมีตัวเลือกอื่นสำหรับการบีบอัด 7zip ด้วยตัวเลือกนั้นคุณสามารถบรรลุสิ่งที่คุณต้องการ


0

ฉันได้รับเพียงแค่การทำงานที่ว่าปัญหานี้และหนึ่งในประเด็นที่ผมพบคือความซ้ำซ้อนของชื่อโฟลเดอร์ภายในเก็บคือเมื่อบีบอัดโฟลเดอร์ที่เรียกว่า "ฟู" ที่เก็บบรรจุผลิตแทนเพียงอย่างใดอย่างหนึ่งที่มี.\foo\fighters.txtfighters.txt

คำตอบคือไปที่ไดเรกทอรีที่กำลังประมวลผลและมีไฟล์เก็บถาวรปรากฏในไดเรกทอรี (root) ก่อนหน้าจากนั้นกลับไปยังไดเรกทอรีนั้นเพื่อประมวลผลโฟลเดอร์ถัดไป

สิ่งสำคัญคือต้องให้ 7ZIP ละเว้นไฟล์ ZIP และ CMD ที่มีอยู่ภายในไดเรกทอรีรากเพื่อป้องกันไม่ให้สิ้นสุดลงในที่เก็บถาวรดังนั้นอาร์กิวเมนต์-x!*.zipและ-x!*.cmdการยกเว้น

สคริปต์นี้จะดูแลโครงสร้างโฟลเดอร์แบบเรียกซ้ำ

@echo off

REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal

if exist *.zip goto zip_exist

for /d %%X in (*) do (
    cls
    cd /D %%X
    "e:\Program Files\7-Zip\7z.exe" a -r  -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
    cd ..
)
goto end

:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.

:end
pause

ควรคัดลอกโค้ดข้างต้นไปยังไฟล์แบตช์เช่น "compress_dirs.cmd" และเรียกใช้ในฐานะผู้ดูแลระบบจากไดเรกทอรีที่มีโฟลเดอร์ที่คุณต้องการบีบอัด

หวังว่านี่จะช่วยได้


0

หากคุณต้องการเก็บโครงสร้างโฟลเดอร์และบันทึกแต่ละไฟล์ในโครงสร้างของตนเองให้ลองทำดังนี้:

บันทึกคำสั่งนี้ในไฟล์ที่มีนามสกุล. bat และวางไว้ในโฟลเดอร์ที่คุณต้องการ zip:

FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel

บันทึก:

-sdel: ลบไฟล์ต้นฉบับ (ไม่บังคับถ้าคุณต้องการเก็บไฟล์บีบอัดไว้)

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