PowerShell'i, bir klasör grubunun içeriğini, her klasör için ayrı bir ZIP dosyasını sıkıştırın


3

PowerShell'in bir sürü klasörün içeriğini sıkıştırmasını ve her klasör için ayrı bir ZIP dosyası almasını isterdim. Son zamanlarda, bunu bir .bat dosyasıyla nasıl yapacağımı sordum ve bir cevap verildi.

for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z\7za.exe" a -tzip %%d.zip %%d

Ancak, bu yalnızca adlarında boşluk olmayan klasörler için yararlı oldu. Bu partinin olmasının nedeni aşağıdakileri yapar: Klasörün adı "Jeff'in tatil resimleri" ise, değişkenler şöyle olacaktır:

%%d = Jeff's<br>
%%e = vacation<br>
%%f = pictures<br>

Ve sonra sadece %%d7-Zip programına geçmeye çalışır , bu böyle bir klasör bulamaz ve bu nedenle ZIP dosyası oluşturmaz.

Bazı dersleri, dökümantasyon sitelerini ve benzeri şeyleri araştırmaya çalıştım, ancak bir cevap bulamadım. Bir cevap olabilir, ama elimden geleni PowerShell'de denemek için bu fırsatı değerlendirmek istiyorum.

Bir argümanlı bir işlevin, sıkıştırılması gereken alt klasörlerin ana klasörü olmasının en iyi yaklaşım olacağını düşünüyordum.

İşte elimde olan, işe yaramayan şey, muhtemelen PowerShell'deki genel deneyimim nedeniyle:

function zipFolders($parent) {
    $zip = "C:\Program Files\7-Zip\7z\7za.exe";
    $parents | ForEach-Object $zip a -tzip
}

Şimdi powershell hakkında değilim, ancak toplu iş dosyası için %% d'nin tırnak işaretleri içinde kullanılmasını deneyin ("%% d", "%% d.zip"). Powershell'de iyi şanslar, benim de öğrenmem gerekiyor.
Scott McClenning,

Evet, yazan kişi eski cevabı bununla güncelledi.
KdgDev

Yanıtlar:


4

Çalışabilmesi için 7-Zip dosyasına bir çıktı dosyası adı ve giriş dizini adı vermeniz gerekir. Ayrıca alt yolunu bulmak için üst yolunuzdaki Get-ChildItem (dir) öğesini çağırmak istersiniz.

Aşağıdaki kod parçası, her bir alt $rootFolderklasörü mevcut yoldaki alt klasörden sonra adlandırılmış bir maksimum sıkıştırma ZIP dosyasına koymalıdır .

dir $rootFolder | Where-Object { $_.PSIsContainer } | ForEach-Object { C:\"Program Files"\7-zip\7z.exe a -mx9 "$_.zip" $_.FullName }

Bu kod doğru mu? Bu cevabın değeri hakkında herhangi bir geri bildirim yoktur.
Russell

@Russell: PowerShell kodunun kendisi bana doğru görünüyor. Bununla birlikte, komut satırının 7Zip argümanını bilmiyorum, bu nedenle kendi durumunuz için küme parantezleri arasındaki bölümü ince ayar yapmanız gerekebilir.
Robert S Ciaccio

Bir klasörde gitme işlemini çalıştırmak için bir PS betiği yazmaya çalışırken bu betiği denedi. Özyineleme işe yarıyor ancak 7z komutu çalışmıyor (Hata: yanlış komut satırı), en azından sahip olduğum sürümde (PowerShell 2, 7z sürüm 7).
calenti
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.