ฉันจะเก็บถาวรด้วยไดเรกทอรีย่อยโดยใช้บรรทัดคำสั่ง 7-Zip ได้อย่างไร หรือฉันจะเก็บโครงสร้างโฟลเดอร์ในขณะที่เก็บถาวรได้อย่างไร


16

ฉันมีไฟล์มากมายดังนี้:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

ฉันแค่อยากรู้วิธีรักษาโครงสร้างของโฟลเดอร์ในขณะที่เก็บถาวร สิ่งนี้สำคัญกว่าสิ่งที่ซ้ำกันเพื่อทราบวิธีแก้ปัญหานั้นจะเป็นโบนัส

@Lamb "คุณต้องการเก็บถาวรเฉพาะไฟล์ที่เลือก (ไม่ใช่เนื้อหาของโฟลเดอร์ทั้งหมด) จากโฟลเดอร์ G1 และ G2 หรือไม่"

เกือบจะพูดได้ทั้งหมด แต่ฉันจะพยายามปรับปรุง: ไม่เพียง แต่ฉันต้องการย้ายเฉพาะบางไฟล์ที่เลือกไปยังไฟล์เก็บถาวร ฉันยังมีรายการไฟล์เหล่านี้รวมถึงชื่อพา ธ ของแต่ละไฟล์

ดังนั้นใน SubDir1 อาจมี 10 ไฟล์ซึ่งฉันต้องการ zip สามไฟล์และใน SubDir1 \ sub2 อาจมีห้าไฟล์ซึ่งฉันต้องการ zip ทั้งห้า ไฟล์ที่ฉันต้องการเก็บถาวรอยู่ใน listfile

อาจมีไฟล์ที่ซ้ำกันดังนั้นฉันจึงหวังว่าจะมีการเพิ่มไดเรกทอรีย่อย 7-Zip ไม่เห็นว่าเป็นไฟล์ซ้ำ

และฉันชอบที่จะทำมันในบรรทัดคำสั่ง

ฉันได้ลองไฟล์แบตช์เช่นนี้แล้ว:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

นี่หมายความว่าไฟล์ 01antique-shop.mp3, 02antique-shop.mp3, .... , จนถึง 33antique-shop.mp3 และ 34antique-shop.mp3 ไม่ควรถูกเก็บถาวร

The foldernames (= ไดเรกทอรีย่อย) ไม่ได้ถูกเพิ่มใน MyArchive.7z และนี่คือปัญหา

เห็นได้ชัดว่าฉันต้องการใช้คอมมานโดเพียงอันเดียวกับ listfile แต่นั่นก็ไม่ได้ผลเช่นกัน

ฉันได้พยายาม:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

ซึ่งใช้งานได้ดีจริง ๆ เท่าที่การเลือกไป แต่ไม่ได้เก็บโครงสร้างไดเรกทอรี เศร้า.

ฉันจะทำสิ่งนี้ได้อย่างไร


คุณต้องการเก็บถาวรไฟล์เลือกเฉพาะ (ไม่ใช่เนื้อหาของโฟลเดอร์ทั้งหมด) จากโฟลเดอร์ G1 และ G2 หรือไม่?
Ankit

คำตอบ:


12

7-Zip (15.14) เวอร์ชั่นล่าสุดที่เสถียรมีสวิตช์ -spf ที่ช่วยให้การจัดเก็บพา ธ สมบูรณ์

ตัวอย่างเช่นหากไฟล์list.txtคือ

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

คำสั่ง7z a p.7z -spf @list.txtจะสร้างไฟล์เก็บถาวรที่เก็บพา ธ สัมบูรณ์ตามที่อยู่ในรายการ อีกทางหนึ่งคำสั่ง7z a p.7z -spf2 @list.txtจะลบอักษรระบุไดรฟ์:

tmp\dir1\file.txt
tmp\dir2\file.txt

หากไฟล์list.txtนั้นเป็น

dir1\file.txt
dir2\file.txt

คำสั่ง7z a p.7z @list.txtจะเก็บเส้นทางสัมพัทธ์ตามที่อยู่ในรายการทั้งในเวอร์ชัน 9.20 และ 15.14

ฉันทำการทดสอบเพิ่มเติมกับสวิตช์ -spf ผลที่ได้ที่นี่


ฉันค้นหาความคิดนี้เป็นเวลาหนึ่งวัน ขอบคุณมาก!
Moshe L

9

ฉันได้มันไปเก็บไดเรกทอรีด้วยไดเรกทอรีย่อยโดยใช้ต่อไปนี้ :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

ฉันไม่สามารถหาลิงก์โดยตรงไปยัง 7zA.exe ได้ทุกที่ (ตามลิงค์ของคุณ) มันล้าสมัยและถูกแทนที่ด้วย 7z.exe หรือไม่
PrincessPooleRulz

@ user194767: 7za.exe เป็นรุ่นบรรทัดคำสั่ง
Karan

และฉันต้องการใช้ แต่ไม่พบสิ่งที่ต้องการในหน้านั้น 7-zip.org/download.html ดังนั้นเพื่อให้ชัดเจน: ด้วย"ไม่สามารถหาลิงก์โดยตรงไปยัง 7zA.exe ได้ทุกที่"ฉันหมายถึง: "โปรดให้ลิงค์โดยตรงกับซอฟต์แวร์ฟรีนี้!" ขอบคุณ!
PrincessPooleRulz

1
@ user194767: ตกลงนี่เป็นรุ่นปัจจุบัน แต่คุณกำลังบอกฉันว่าคุณไม่เห็นรุ่นบรรทัดคำสั่ง 7-Zipที่ใดก็ได้ในหน้านั้นหรือไม่!
Karan

ฉันไม่สามารถลอง 7zA.exe ได้ดังนั้นลองใช้ 7z.exe และใช้งานได้ ฉันไม่แน่ใจว่าใช้แฟล็ก -r แต่ไม่จำเป็นต้องเก็บถาวรไดเรกทอรีย่อย
Eric Roper

7

ลองใช้สิ่งนี้แทน:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

ปัญหาน่าจะเป็นที่ผู้คนได้ร้องขอมานานหลายปีสำหรับตัวเลือกการจัดเก็บเส้นทางที่เหมาะสม (เช่นเดียวกับที่พวกเขามีความสามารถในการแก้ไขเก็บหลายปริมาณ ) แต่ผู้เขียนดูเหมือนจะไม่สนใจ นั่นเป็นส่วนหนึ่งของเหตุผลที่ฉันเริ่มใช้ WinRAR มาก


หากคุณมี listfile, 7-Zip จะไม่เก็บพา ธ หากไฟล์ที่จะถูกเก็บถาวรไม่แชร์ไดเรกทอรีระดับบนสุดเดียว ตัวอย่างเช่นถ้าคุณมีInput.txtมีดังต่อไปนี้:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

ถ้าคุณวิ่ง7z a MyArchive.7z @Input.txtคุณจะเห็นว่าเส้นทางถูกถอดออกอย่างสมบูรณ์ซึ่งดูเหมือนว่าจะย้อนกลับไปที่ฉันอย่างสมบูรณ์ (OTOH rar a MyArchive.rar @Input.txtทำงานได้ดี)

ดังนั้นเพื่อเอาชนะข้อบกพร่องของ 7-Zip คุณสามารถใช้แบตช์ไฟล์ดังนี้:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

หมายเหตุ:แทนที่D:\MyArchive.7zด้วยเส้นทางที่ถูกต้องไปยังที่เก็บปลายทางของคุณ นอกจากนี้ไฟล์แบตช์ควรทำงานโดยไม่คำนึงถึงว่าคุณได้อ้างถึงเส้นทางใน listfile ของคุณหรือไม่


แก้ไข:ถ้า listfile ของคุณดูเหมือนว่า:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

หรือ

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

จากนั้นแก้ไขให้มีลักษณะเช่นนี้แทน:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

ตอนนี้สมมติว่าทุกไฟล์จะถูกเก็บไว้อยู่ภายใต้การC:\$$-edriveให้ไปที่ C: \ 7z a C:\MyArchive.7z @C:\Input.txtและเรียกใช้ ใช้ listfile เส้นทางที่จะถูกบันทึกไว้เท่านั้นถ้าไม่มีตัวอักษรไดรฟ์ที่มีอยู่ไม่มีเครื่องหมายเริ่มต้นจะมีและถ้าระดับบนสุด (ราก) ไดเรกทอรีจะเหมือนกันสำหรับทุกไฟล์ นอกจากนี้เพื่อผลลัพธ์ที่ดีที่สุดฉันแนะนำให้คุณอย่าสร้าง MyArchive.7z ใน C: \ $$ - edrive


คำตอบก็คือ 3/4 โอเค RAR ทำงานได้ดีสุด แต่ชุดไฟล์ทำงานได้ soso นี่คือผลลัพธ์และมันเพิ่มไฟล์เดียวไปยังไฟล์เก็บถาวรของฉันไฟล์ที่ไม่มีช่องว่างในชื่อไฟล์ __ C: \ Programs \ zippers \ 7-Zip> (pushd "C: \ c: \ Programs \ zippers \ 7-Zip \ 7z .exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ G \ gattaca_7mp 3_zefen \ gattaca - 03 the one moment.mp3" "popd) 7-Zip 4.65 ลิขสิทธิ์ (c) 1999-2009 Igor Pavlov 2009 การสแกนการอัปเดตไฟล์เก็บถาวร c: \ $$ - edrive \ FGH.7z ข้อผิดพลาด: ไม่สามารถเปิดไฟล์ FGH.7z.tmp การเข้าถึงถูกปฏิเสธ ข้อผิดพลาดของระบบ: ข้อผิดพลาดที่ไม่ได้กำหนด ===== ที่สำคัญที่สุดคือการเข้าถึงที่ถูกปฏิเสธข้อผิดพลาด?
PrincessPooleRulz

คุณสามารถเพิ่มตัวอย่างสองสามบรรทัด (ที่มีช่องว่างและไม่มี) จากลิสต์ไฟล์จริงลงในคำถามของคุณด้านบนได้หรือไม่
Karan

ตกลงดังนั้นฉันจึงแทนที่ช่องว่างทั้งหมดด้วยจุดในชื่อไฟล์ แต่ไม่ใช่ในชื่อพา ธ ซึ่งฉันจะลองตอนนี้ ผลลัพธ์ยังคงเป็น: C: \ Programs \ zippers \ 7-Zip> (______ pushd c: _______ c: \ Programs \ zippers \ 7-Zip \ 7z.exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-. starcraft.vs.south.park.mp3 "_______ popd________) ________ การสแกนการอัปเดตไฟล์เก็บถาวร c: \ $$ - edrive \ FGH.7z ข้อผิดพลาด: ไม่สามารถเปิดไฟล์ FGH.7z.tmp การเข้าถึง ปฏิเสธ ข้อผิดพลาดของระบบ: ข้อผิดพลาดที่ไม่ได้กำหนด
PrincessPooleRulz

"ฉันแทนที่ช่องว่างทั้งหมดด้วยจุดในชื่อไฟล์" - หมายความว่าคุณเปลี่ยนชื่อไฟล์จริงหรือเพียงแค่แก้ไข listfile? ช่องว่างในชื่อไฟล์และเส้นทางควรใช้ได้โปรดดูที่การแก้ไขด้านบน (เช่นจาก listfile ของคุณลบ C: \ และวางเครื่องหมายคำพูดรอบเส้นทางทั้งหมด) ตอนนี้คุณควรจะสามารถใช้ 7z โดยตรงแทนที่จะใช้วิธีแก้ปัญหาไฟล์แบตช์ของฉัน
Karan

1. ฉันเปลี่ยนชื่อทั้ง = = = = = = 2 ฉันได้ทำการเปลี่ยนแปลงของคุณแล้ว แต่ก็ยังใช้งานไม่ได้กับ 7z = = = = = = 3 $$ - edrive \ เป็นไดเรกทอรีเดียวเท่านั้น = = = = = 4. ข้อความผิดพลาด = = = = = คำเตือนสำหรับไฟล์: = = = = = $$ - edrive: ระบบไม่พบไฟล์นั้น = = = = = = = = = = "$$ - edrive: ระบบไม่พบไฟล์นั้น = = = = = = = = = = คำเตือน: ไม่สามารถหาไฟล์ได้ 2 ไฟล์ = = = = = C: \ Programs \ zippers \ 7-Zip> = = = = = โปรดทราบว่ามีคำเตือนสองคำและคำที่สองเริ่มต้นด้วยเครื่องหมายคำพูดคู่ ... Odd?
PrincessPooleRulz

0

7-Zip จะเห็นพวกเขาว่าซ้ำกันโดยไม่คำนึงถึงและข้ามพวกเขา หากมีวิธีใดที่จะแก้ไขได้ฉันไม่เคยพบมัน - ฉันมักจะแบ่งงานออกเป็นเอกสารสำคัญหลายฉบับ


คุณรู้วิธีเก็บโครงสร้างโฟลเดอร์ในขณะที่ซิปไฟล์เข้าสู่ไฟล์เก็บถาวรได้อย่างไร? พวกเขาบอกว่าเป็นค่าเริ่มต้น แต่ไม่ใช่
PrincessPooleRulz

@ user194767 - ฉันใช้บรรทัดคำสั่งเช่นนี้: %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempโดยที่ZDIRเป็นเส้นทางไปที่ 7-Zip และZIPเป็นไดรฟ์ปลายทาง
MT_Head

0

ไม่แน่ใจว่าจะช่วยงานซ้ำซ้อนอย่างไร อย่างไรก็ตามฉันคิดว่าระบบที่สะดวกกว่าชุดที่มีคำสั่งแบบเต็มต่อไปนี้คือการสร้าง listfile.txt:

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

แล้วบีบอัดพวกมันทั้งหมดด้วย 7z a -r -tzip archive.zip @listfile.txt


0

ฉันได้สร้างสคริปต์ค้างคาวเพื่อใช้กับ totalcmd "tot-zip.bat":

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

จากนั้นใน totalcmd สร้างทางลัดสำหรับมัน: ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นเมื่อคุณต้องการซิปไฟล์ / โฟลเดอร์และเก็บรักษาโครงสร้างโฟลเดอร์ที่สัมพันธ์กับ%TOP_DIR%คุณเพียงแค่เลือกไฟล์ที่ต้องการ (อยู่ภายใน%TOP_DIR%) แล้วกดปุ่ม

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