7-Zip komut satırını kullanarak alt dizinlerle nasıl arşivlerim? Veya arşivlerken klasör yapısını nasıl TUTARIM?


16

Böyle bir sürü dosya var:

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

Arşivleme sırasında klasör yapısının nasıl korunacağını bilmek istiyorum . Bu, yinelenen şeyden daha önemlidir, bunu nasıl çözeceğinizi bilmek bir bonus olacaktır.

@Lamb "G1 ve G2 klasörlerinden yalnızca seçili dosyaları (tüm klasör içeriğini değil) arşivlemek istiyor musunuz?"

Bu neredeyse her şeyi söylüyor, ancak geliştirmeye çalışacağım: Sadece seçilen bazı dosyaları bir arşive taşımak istemiyorum . Ayrıca her dosyaya yol adları da dahil olmak üzere bu dosyaların bir listesi var .

Bu nedenle, SubDir1'de üçünü sıkıştırmak istediğim 10 dosya olabilir ve SubDir1 \ sub2'de beşini de sıkıştırmak istediğim beş dosya olabilir. Arşivlemem gereken dosyalar bir liste dosyasında.

Yinelenen dosyalar olabilir, bu yüzden umarım alt dizinler eklenirken, 7-Zip bunları kopya olarak görmez.

Ve bunu komut satırında yapmayı seviyorum.

Ben böyle bir toplu iş dosyası denedim:

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

Bu ayrıca, 01antique-shop.mp3, 02antique-shop.mp3, ...., 33antique-shop.mp3 ve 34antique-shop.mp3 dosyalarının arşivlenmemesi gerektiği anlamına gelir.

Klasör adları (= alt dizinler) MyArchive.7z dosyasına eklenmedi ve sorun bu.

Açıkçası, bir liste dosyasıyla sadece bir komando kullanmak istiyorum, ama bu da işe yaramıyor.

Denedim:

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

Bu aslında seçim kadarıyla gayet iyi çalışıyor, ama dizin yapısını tutmaz. Ne yazık ki.

Bunu nasıl yaparım?


G1 ve G2 klasörlerinden yalnızca seçili dosyaları (tüm klasör içeriğini değil) arşivlemek mi istiyorsunuz?
Ankit

Yanıtlar:


12

7-Zip'in (15.14) en son kararlı sürümü, mutlak yol depolamasını sağlayan -spf anahtarına sahiptir.

Örneğin, dosya eğer list.txt olduğunu

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

komut 7z a p.7z -spf @list.txt, listede olduğu gibi mutlak yolları saklayan bir arşiv oluşturur. Alternatif olarak, komut 7z a p.7z -spf2 @list.txtsürücü harfini kaldıracaktır:

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

Dosya Eğer list.txt olduğunu

dir1\file.txt
dir2\file.txt

komut 7z a p.7z @list.txt, göreli yolları listede olduğu gibi 9.20 ve 15.14 sürümlerinde depolar.

-Spf anahtarıyla daha fazla test yaptım. Sonuçlar burada .


Bu fikri bir günlüğüne araştırıyordum. Teşekkürler !
Moshe L

9

Aşağıdakileri kullanarak alt dizinlerle bir dizini arşivlemek için aldım :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

7zA.exe'ye (bağlantınıza göre) herhangi bir yerde doğrudan bir bağlantı bulamıyorum, eski ve yerine 7z.exe?
PrincessPooleRulz

@ user194767: 7za.exe, komut satırı sürümüdür .
Karan

ve kullanmak istiyorum, ancak bu sayfada 7-zip.org/download.html gibi bir şey bulamıyorum. Yani, açık söylemek gerekirse : " 7zA.exe'ye doğrudan bir bağlantı bulamadım" ile Gerçekten demek istedim: "Lütfen bana bu ücretsiz yazılıma doğrudan bir bağlantı verin!" Teşekkür ederim!
PrincessPooleRulz

1
@ user194767: Tamam, burada , güncel sürümü ama sen nokta olamazdı bana söylüyorsun 7-Zip Komut Satırı Sürüm sayfa üzerinde ?!
Karan

7zA.exe bu yüzden 7z.exe kullanarak çalıştı olamazdı ve çalıştı. -R bayrağının ne için kullanıldığından emin değilim ama alt dizinleri arşivlemek gerekli değil.
Eric Roper

7

Bunun yerine şunu deneyin:

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

Sorun, insanların yıllardır uygun yol depolama seçenekleri ( çok hacimli arşivleri değiştirme yeteneği için olduğu gibi) istediği gibi görünüyor, ancak yazar ilgilenmiyor gibi görünüyor. WinRAR'ı bu kadar çok kullanmaya başlamamın bir nedeni de bu.


Eğer bir Liste dosyanıza varsa, 7-Zip edecek değil dosyalar tek üst düzey dizin paylaşmayan arşivlenmesi eğer yolları saklayın. Örneğin , aşağıdakileri içeren Input.txt dosyanız varsa :

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

Eğer 7z a MyArchive.7z @Input.txtkoşarsan, yolların tamamen soyulduğunu göreceksin, ki bu tamamen bana geri döndü (OTOH rar a MyArchive.rar @Input.txtişi iyi yapıyor).

7-Zip eksikliğinin üstesinden gelmek için, bir toplu iş dosyasını aşağıdaki gibi kullanabilirsiniz:

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

Not:D:\MyArchive.7z Hedef arşivinize giden doğru yolla değiştirin . Ayrıca, toplu iş dosyası, liste dosyanızdaki yollardan alıntılanmış olup olmadığınıza bakılmaksızın çalışmalıdır.


Düzenleme: Liste dosyanız aşağıdaki gibi görünüyorsa:

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

veya

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

daha sonra bunun gibi görünecek şekilde düzenleyin:

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

Şimdi arşivlenecek tüm dosyaların altında olduğu varsayılarak C:\$$-edrive, C: \ 'ye gidin ve çalıştırın 7z a C:\MyArchive.7z @C:\Input.txt. Bir liste dosyası kullanıldığında, yollar yalnızca sürücü harfleri yoksa, ilk ters eğik çizgi yoksa ve üst düzey (kök) dizin tüm dosyalar için aynıysa kaydedilir. Ayrıca, en iyi sonuçlar için C: \ $$ - edrive'da MyArchive.7z oluşturmamanızı tavsiye ederim.


Cevap 3/4 iyiydi. RAR süper çalıştı, ancak toplu dosya soso çalıştı. İşte çıktı ve arşivime yalnızca ONE dosya ekledi, dosya adında boşluk olmayan dosya ._ 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 bir an.mp3" "popd) 7-Zip 4.65 Telif Hakkı (c) 1999-2009 Igor Pavlov 2009 Tarama Arşiv güncelleniyor c: \ $$ - edrive \ FGH.7z Hata: FGH.7z.tmp dosyası açılamıyor Erişim engellendi. Sistem hatası: undefined error ===== Belki de en önemlisi erişim reddedildi hatası mı?
PrincessPooleRulz

Asıl liste dosyanızdan yukarıdaki sorunuza birkaç örnek satır (boşluklu ve boşluksuz) ekleyebilir misiniz ?
Karan

tamam, bu yüzden tüm alanları dosya adlarında noktalarla değiştirdim, ancak şimdi deneyeceğim yol adlarında değil. çıktı hala: 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________) ________ Tarama Arşiv güncelleniyor c: \ $$ - edrive \ FGH.7z Hata: FGH.7z.tmp dosyası açılamıyor Erişim yalanladı. Sistem hatası: undefined hatası
PrincessPooleRulz

"Tüm boşlukları dosya adlarında noktalarla değiştirdim" - Yani gerçek dosyaları yeniden adlandırdınız mı, ya da sadece liste dosyasını mı düzenlediniz? Hem dosya adlarındaki hem de yollardaki boşluklar iyi olmalıdır, yukarıdaki düzenlememe bakın (yani, list dosyanızdan C: \ 'yi kaldırın ve tüm yolların etrafına tırnak işareti koyun). Şimdi toplu iş dosyası geçici çözümü yerine doğrudan 7z kullanabilmeniz gerekir.
Karan

1. Her ikisini de yeniden adlandırdım = = = = = = 2. Değişikliklerinizi yaptım, ancak yine de 7z = = = = = = 3 ile çalışmıyor. $$ - edrive \ gerçekten de en üstteki dizindir. = = = = = 4. Hata mesajları = = = = = Dosyalar için UYARILAR: = = = = = $$ - edrive: Sistem bu dosyayı bulamıyor. = = = = = = = = = = "$$ - edrive: Sistem bu dosyayı bulamıyor. = = = = = = = = = = = UYARI: 2 dosya bulunamıyor = = = = = C: \ Programlar \ zippers \ 7-Zip> = = = = = iki uyarı olduğunu ve ikincisinin bir çift alıntı ile başladığını unutmayın ... Tek?
PrincessPooleRulz

0

7-Zip onları ne olursa olsun kopyalar olarak görür ve atlar. Bunu aşmanın bir yolu varsa, onu hiç bulamadım - işi her zaman birkaç arşive ayırırım.


dosyaları arşive sıkıştırırken klasör yapısını nasıl tutacağınızı biliyor musunuz? Bunun varsayılan olduğunu söylüyorlar, ama DEĞİL.
PrincessPooleRulz

: - @ user194767 Böyle bir komut satırını kullanın 7-Zip yoludur ve hedef sürücüdür. %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempZDIRZIP
MT_Head

0

Yinelenenlere nasıl yardımcı olacağınızdan emin değilim. Ancak, tam bir komut ile bir toplu işten daha uygun bir sistem listfile.txt oluşturmak olacağını düşünüyorum:

 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

Ve sonra hepsini sıkıştırın 7z a -r -tzip archive.zip @listfile.txt


0

Totalcmd "tot-zip.bat" ile kullanmak için bir yarasa komut dosyası oluşturduk:

@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

Sonra totalcmd'de bunun için bir kısayol oluşturun: resim açıklamasını buraya girin

Daha sonra bazı dosyaları / klasörleri sıkıştırmak ve klasör yapısını korumak %TOP_DIR%istediğinizde, sadece gerekli dosyaları (içeride bir yerde %TOP_DIR%) seçin ve düğmesine basın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.