2013-07-16 42 views
5

'u kullanarak listedeki her dizinde bir komutu çalıştırma PowerShell'de bir listede her dizinin bir .zipini oluşturmam gerekiyor. Bir sebepten dolayı, her bir dizine, o yola göre bir komut çalıştırmak için nasıl değiştirileceğini anlayamıyorum.PowerShell

$dir = Get-ChildItem d:\directory | ? {$_.PSIsContainer} 

$dir | ForEach-Object {Set-Location $_.FullName; 
Invoke-Expression "7z.exe A" + $_.Name + ".rar " + $_.Path + "\"} 

komut çirkin, fakat 7Zip metni ayrıştırmak gibi görünüyor şekilde, bu şekilde gitmek zorunda kaldı:

İşte benim durumdur. Komutun her dizinde bir ZIP dosyası oluşturması gerektiğine inanıyorum, dizin ismine eşit olarak ayarlanmış isimle ve dizindeki tüm dosyaları dahil etmeliyim.

Bazı PowerShell cehennemde sıkışıp kalmışım gibi görünüyor, ancak bazı nedenlerle nesnelerin değerlerine bile erişemiyorum.

Örneğin, $ dir eklediysem, dizinler listemi görüyorum. Ancak, ben

gci $dir[1] 

PowerShell hiçbir şey döndürmezse. Aslında, değişken özelliği içinde bulunan dizin yolunu sıralamak değil, bunun yerine, bu değer içinde yer alan öğeleri listelemeye çalışmak yerine, tabii ki boş olacaktır.

Ne verir ?! Bunu nasıl yaparım?

+0

Farklı bir forumda başka bir yöntem buldum. Temelde dizin gezinme işlevlerimi komuta binamdan ayırmak için gerekliydi ve ben bir şeyleri gözden kaçırıyordum. Aslında, ForEach ($ vars $ vars) yöntemini bir diziyle tekrar tekrar aramayı unutmuştum. Set Alias ​​sz: http://sourceforge.net/p/sevenzip/discussion/45797/thread/49a7a85b/ – FoxDeploy

+0

Zip çağrı Sessizleştirme bir takma ad kullanmak yapmak için "C: \ Windows \ 7za.exe"; sz A -tzip "$ ($ _. Name) .rar" $ _. Yolu –

cevap

9

Konumu ayarlamanıza gerek yok, sadece 7z.exe yollarını sağlamanız yeterli. Ayrıca, 7zip Rar'a sıkıştırılmaz, sadece sıkıştırılır.

$dir = dir d:\directory | ?{$_.PSISContainer} 

foreach ($d in $dir){ 
    $name = Join-Path -Path $d.FullName -ChildPath ($d.Name + ".7z") 
    $path = Join-Path -Path $d.FullName -ChildPath "*" 

    & "C:\Program Files\7-Zip\7z.exe" a -t7z $name $path 
}