Làm cách nào để lưu trữ với các thư mục con bằng dòng lệnh 7-Zip? Hoặc, làm cách nào để giữ cấu trúc thư mục trong khi lưu trữ?


16

Tôi có một loạt các tập tin như thế này:

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

Tôi chỉ muốn biết làm thế nào để giữ cấu trúc thư mục trong khi lưu trữ. Điều này quan trọng hơn điều trùng lặp, để biết cách giải quyết điều đó, sẽ là một phần thưởng.

@Lamb "Bạn có muốn chỉ lưu trữ các tệp chọn lọc (không phải toàn bộ nội dung thư mục) từ các thư mục G1 và G2 không?"

Điều đó gần như đã nói lên tất cả, nhưng tôi sẽ cố gắng cải thiện: Tôi không chỉ muốn chuyển một số tệp đã chọn sang một kho lưu trữ. Tôi cũng có một danh sách các tệp này, bao gồm tên đường dẫn đến từng tệp.

Vì vậy, trong SubDir1 có thể có 10 tệp, trong đó tôi muốn nén ba tệp và trong SubDir1 \ sub2 có thể có năm tệp, trong đó tôi muốn nén cả năm tệp. Các tệp mà tôi cần lưu trữ nằm trong một listfile.

Có thể có các tệp trùng lặp, vì vậy tôi hy vọng rằng với các thư mục con được thêm vào, 7-Zip KHÔNG xem chúng là các bản sao.

Và tôi thích làm điều đó trên dòng lệnh.

Tôi đã thử một tệp bó như thế này:

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

Điều này cũng có nghĩa là các tệp 01antique-shop.mp3, 02antique-shop.mp3, ...., til 33antique-shop.mp3 và 34antique-shop.mp3, KHÔNG nên được lưu trữ.

Tên thư mục (= thư mục con) không được thêm vào MyArchive.7z và đây là vấn đề.

Rõ ràng, tôi muốn sử dụng chỉ một lệnh với một listfile, nhưng điều đó cũng không hoạt động.

Tôi đã thử:

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

mà thực sự hoạt động khá tốt cho đến khi lựa chọn, nhưng nó không giữ cấu trúc thư mục. Thật đáng buồn.

Làm thế nào để tôi làm điều này?


Bạn có muốn lưu trữ chỉ các tệp chọn lọc (không phải toàn bộ nội dung thư mục) từ các thư mục G1 và G2 không?
Ankit

Câu trả lời:


12

Phiên bản ổn định mới nhất của 7-Zip (15,14) có khóa -spf cho phép lưu trữ đường dẫn tuyệt đối.

Ví dụ: nếu tệp list.txt

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

lệnh 7z a p.7z -spf @list.txtsẽ tạo ra một kho lưu trữ các đường dẫn tuyệt đối như trong danh sách. Ngoài ra, lệnh 7z a p.7z -spf2 @list.txtsẽ xóa ký tự ổ đĩa:

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

Nếu tập tin list.txt

dir1\file.txt
dir2\file.txt

lệnh 7z a p.7z @list.txtsẽ lưu các đường dẫn tương đối như trong danh sách, trong cả hai phiên bản 9.20 và 15,14.

Tôi đã làm nhiều thử nghiệm hơn với switch -spf. Kết quả là đây .


Tôi đã tìm kiếm ý tưởng này trong một ngày. cảm ơn !
Moshe L

9

Tôi đã nhận nó để lưu trữ một thư mục với các thư mục con bằng cách sử dụng như sau :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

Tôi không thể tìm thấy một liên kết trực tiếp đến 7zA.exe ở bất cứ đâu (theo liên kết của bạn), nó có bị lỗi thời và được thay thế bởi 7z.exe không?
PrincessPooleRulz

@ user194767: 7za.exe là phiên bản dòng lệnh .
Karan

và, tôi muốn sử dụng nó, nhưng tôi không thể tìm thấy lượt thích trên trang đó, 7-zip.org/doad.html. Vì vậy, chỉ cần rõ ràng: với "không thể tìm thấy liên kết trực tiếp đến 7zA.exe ở bất cứ đâu" Tôi thực sự muốn nói: "Xin vui lòng cho tôi một liên kết trực tiếp đến phần mềm miễn phí này!" Cảm ơn bạn!
PrincessPooleRulz

1
@ user194767: Ok, đây là phiên bản hiện tại, nhưng bạn đang nói với tôi rằng bạn không thể phát hiện Phiên bản dòng lệnh 7-Zip ở bất cứ đâu trên trang đó?!
Karan

Tôi không thể 7zA.exe nên đã thử sử dụng 7z.exe và nó đã hoạt động. Tôi không chắc cờ -r được sử dụng để làm gì nhưng không cần thiết để lưu trữ các thư mục con.
Eric Roper

7

Hãy thử điều này thay thế:

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

Vấn đề dường như là mọi người đã yêu cầu nhiều năm cho các tùy chọn lưu trữ đường dẫn thích hợp (giống như họ có khả năng sửa đổi tài liệu lưu trữ nhiều tập ), nhưng tác giả dường như không quan tâm. Đó là một phần lý do tại sao tôi bắt đầu sử dụng WinRAR rất nhiều.


Nếu bạn có listfile, 7-Zip sẽ không lưu đường dẫn nếu các tệp được lưu trữ không chia sẻ một thư mục cấp cao nhất. Ví dụ: nếu bạn có Input.txt chứa các mục sau:

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

Nếu bạn chạy 7z a MyArchive.7z @Input.txt, bạn sẽ thấy rằng các đường dẫn đã bị tước hoàn toàn, điều này dường như hoàn toàn ngược với tôi (OTOH rar a MyArchive.rar @Input.txtthực hiện công việc rất tốt).

Vì vậy, để khắc phục sự thiếu hụt của 7-Zip, bạn có thể sử dụng một tệp bó như sau:

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

Lưu ý: Thay thế D:\MyArchive.7zbằng đường dẫn thích hợp đến kho lưu trữ đích của bạn. Ngoài ra, tệp bó sẽ hoạt động bất kể bạn có trích dẫn đường dẫn trong listfile của mình hay không.


Chỉnh sửa: Nếu listfile của bạn trông như:

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

hoặc là

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

sau đó chỉnh sửa nó để trông như thế này thay vào đó:

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

Bây giờ giả sử tất cả các tệp được lưu trữ ở dưới C:\$$-edrive, điều hướng đến C: \ và chạy 7z a C:\MyArchive.7z @C:\Input.txt. Sử dụng một listfile các đường dẫn sẽ được lưu lại chỉ nếu không có ký tự ổ đĩa có mặt, không có dấu xồ nguợc ban đầu là ở đó và nếu cấp cao nhất (root) thư mục là như nhau cho tất cả các file. Ngoài ra, để có kết quả tốt nhất, tôi khuyên bạn không nên tạo MyArchive.7z trong C: \ $$ - edrive.


Vâng, câu trả lời là 3/4 ok. RAR làm việc siêu, nhưng tập tin hàng loạt làm việc soso. Đây là đầu ra và nó chỉ thêm MỘT tệp vào kho lưu trữ của tôi, tệp không có khoảng trắng trong tên tệp___ 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.mp3" "popd) 7-Zip 4.65 Bản quyền (c) 1999-2009 Igor Pavlov 2009 Quét Cập nhật kho lưu trữ c: \ $$ - edrive \ FGH.7z Lỗi: Không thể mở tệp FGH.7z.tmp Truy cập bị từ chối. Lỗi hệ thống: lỗi không xác định ===== Quan trọng nhất có lẽ là lỗi truy cập bị từ chối?
PrincessPooleRulz

Bạn có thể thêm một vài dòng mẫu (có dấu cách và không có) từ danh sách thực tế của bạn vào câu hỏi của bạn ở trên không?
Karan

được rồi, vì vậy tôi đã thay thế tất cả các khoảng trắng bằng dấu chấm trong tên tệp, nhưng không phải trong tên đường dẫn, mà tôi sẽ thử ngay bây giờ. đầu ra vẫn là: 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________) phủ định. Lỗi hệ thống: lỗi không xác định
PrincessPooleRulz

"Tôi đã thay thế tất cả các khoảng trắng bằng dấu chấm trong tên tệp" - Có nghĩa là bạn đã đổi tên các tệp thực tế hoặc chỉ chỉnh sửa listfile? Không gian trong cả tên tệp và đường dẫn sẽ ổn, xem phần chỉnh sửa của tôi ở trên (tức là từ listfile của bạn xóa C: \ và đặt dấu ngoặc kép xung quanh tất cả các đường dẫn). Bây giờ bạn sẽ có thể sử dụng 7z trực tiếp thay vì cách giải quyết tệp bó của tôi.
Karan

1. Tôi đã đổi tên cả hai = = = = = = 2. Tôi đã thực hiện các thay đổi của mình, nhưng nó vẫn không hoạt động với 7z = = = = = = 3. $$ - edrive \ thực sự là thư mục hàng đầu duy nhất. = = = = = 4. Thông báo lỗi = = = = = CẢNH BÁO cho các tệp: = = = = = $$ - edrive: Hệ thống không thể tìm thấy tệp đó. = = = = = = = = = = "$$ - edrive: Hệ thống không thể tìm thấy tệp đó. = = = = = = = = = = CẢNH BÁO: Không thể tìm thấy 2 tệp = = = = = C: \ Programs \ zippers \ 7-Zip> = = = = = lưu ý rằng có hai cảnh báo và lần thứ hai bắt đầu bằng một trích dẫn kép ... lẻ?
PrincessPooleRulz

0

7-Zip sẽ xem chúng là bản sao bất kể và bỏ qua chúng. Nếu có bất cứ cách nào để khắc phục điều đó, tôi chưa bao giờ tìm thấy nó - tôi luôn chia công việc thành nhiều tài liệu lưu trữ.


Bạn có biết cách GIỮ cấu trúc thư mục trong khi nén các tệp VÀO một kho lưu trữ không? Họ nói đó là mặc định, nhưng KHÔNG.
PrincessPooleRulz

@ user194767 - Tôi sử dụng một dòng lệnh như thế này: %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempđâu ZDIRlà đường dẫn đến 7-Zip và ZIPlà ổ đĩa đích.
MT_Head

0

Không chắc chắn làm thế nào để giúp với các bản sao. Tuy nhiên, tôi nghĩ rằng một hệ thống thuận tiện hơn một lô với một lệnh đầy đủ sẽ là để tạo một 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

Và sau đó nén tất cả bằng 7z a -r -tzip archive.zip @listfile.txt


0

Tôi đã tạo một tập lệnh bat để sử dụng với totcmd "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

Sau đó, trong Totalcmd tạo một lối tắt cho nó: nhập mô tả hình ảnh ở đây

Sau đó, khi bạn muốn nén một số tệp / thư mục và giữ cấu trúc thư mục tương ứng với %TOP_DIR%bạn, chỉ cần chọn các tệp cần thiết (ở đâu đó bên trong %TOP_DIR%) và nhấn nút.

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.