นี่คือ zip ziper จาก Total Commander:
อย่างไรก็ตามฉันต้องการใช้ 7zip packer ของฉัน เมื่อฉันเลือก 5 ไฟล์ฉันจะได้รับไฟล์. zip 5 ไฟล์แยกจากกันสำหรับแต่ละไฟล์ที่เลือก ฉันจะทำเช่นนั้นใน 7zip ได้อย่างไร
นี่คือ zip ziper จาก Total Commander:
อย่างไรก็ตามฉันต้องการใช้ 7zip packer ของฉัน เมื่อฉันเลือก 5 ไฟล์ฉันจะได้รับไฟล์. zip 5 ไฟล์แยกจากกันสำหรับแต่ละไฟล์ที่เลือก ฉันจะทำเช่นนั้นใน 7zip ได้อย่างไร
คำตอบ:
ฉันไม่แน่ใจว่าคุณสามารถทำสิ่งที่คุณแนะนำโดยใช้ส่วนต่อประสานผู้ใช้แบบกราฟิก แต่แน่นอนคุณสามารถจากบรรทัดคำสั่ง:
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"
ฉันชอบคำตอบของ 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 }
โดยจะรวมเฉพาะไฟล์ที่:
แก้ไข หากคุณต้องการไฟล์ zip แทนไฟล์ 7-zip ให้ใช้zip.exe ของ InfoZipแทน
7z a -tzip archive.zip *.exe
คุณสามารถดาวน์โหลดและติดตั้งปลั๊กอิน 7zip สำหรับ Total Commander จากhttp://www.ghisler.com/plugins.htm เมื่อคุณทำเช่นนั้นที่ด้านขวาของหน้าต่างจากภาพหน้าจอของคุณจะมีตัวเลือกอื่นสำหรับการบีบอัด 7zip ด้วยตัวเลือกนั้นคุณสามารถบรรลุสิ่งที่คุณต้องการ
ฉันได้รับเพียงแค่การทำงานที่ว่าปัญหานี้และหนึ่งในประเด็นที่ผมพบคือความซ้ำซ้อนของชื่อโฟลเดอร์ภายในเก็บคือเมื่อบีบอัดโฟลเดอร์ที่เรียกว่า "ฟู" ที่เก็บบรรจุผลิตแทนเพียงอย่างใดอย่างหนึ่งที่มี.\foo\fighters.txt
fighters.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" และเรียกใช้ในฐานะผู้ดูแลระบบจากไดเรกทอรีที่มีโฟลเดอร์ที่คุณต้องการบีบอัด
หวังว่านี่จะช่วยได้
หากคุณต้องการเก็บโครงสร้างโฟลเดอร์และบันทึกแต่ละไฟล์ในโครงสร้างของตนเองให้ลองทำดังนี้:
บันทึกคำสั่งนี้ในไฟล์ที่มีนามสกุล. bat และวางไว้ในโฟลเดอร์ที่คุณต้องการ zip:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
บันทึก:
-sdel: ลบไฟล์ต้นฉบับ (ไม่บังคับถ้าคุณต้องการเก็บไฟล์บีบอัดไว้)