2012-01-18 11 views
21

Powershell'de bir dizi dosya adı var ve bunların her birine bir yol eklemek ve sonucu yeni bir dizide almak istiyorum. Linq kullanarak bunu yapabileceğimi C# ' Bir Powershell dizisinin her bir öğeyi yeni bir diziye ekle/eşleştirin

...

var files = new string[] { "file1.txt", "file2.txt" }; 
var path = "c:\temp\"; 
var filesWithPath = files.Select(f => path + f).ToArray(); 

Ama Powershell bunu yapmanın deyimsel yolu nedir? Kullanabileceğim bir foreach sözdizimi var gibi görünüyor, ama bunu yapmanın daha özlü ve işlevsel bir yolu olmalı diye düşünüyorum. Bu gibi

cevap

35

Powershell'de bir dizi, @() sözdizimi ile bildirilmiştir. %, foreach-object için kısaltılmıştır. Tüm dosya isimleri ile bir dizi ilan edelim ve foreach ile döngü yapalım. join-path bir yolu ve bir alt yolu tek bir yolla birleştirir.

$files = @("file1.txt", "file2.txt") 
$pFiles = $files | % {join-path "c:\temp" $_ } 
$pFiles 

Çıktı:

c:\temp\file1.txt 
c:\temp\file2.txt 
+0

Çok teşekkürler, bu konuda kısa bir şey görmedim. –

+0

Bu, kaynak dizisinin sonuçtan sadece 1 elemente sahip olması gibi görünüyor, bir dizi olmayacak ... bu sizin anlayışınız mı? – chosenbreed37

+0

@ chosenbreed37 Bu yaklaşık dört yaşında bir soru. Lütfen yeni bir tane yayınlayın, böylece topluluktan daha fazla ilgi göreceksiniz. – vonPryz

2

: Bir foreachta w/o bu rakam olamaz

$a = @("file1.txt","file2.txt") 
$b = "c:\temp\" 
$c = $a | % { $b + $_ } 

. Josh Einstein dan LINQ for Powershell

büyük bir iş kullanılması

Maalesef şu yazabilirsiniz:

$a = @("file1.txt","file2.txt") 
$b = "c:\temp\" 
$c = $a | Linq-Select -Selector {$b + $_ } 

bir LINQ şekilde aynı sonuçları olan ama bir foreach (%) kullanmıyor.

+3

w/o $ c = $ 'olacaktır foreach'' o bir | . {işlem {$ b + $ _}}. Temelde aynıdır, ancak daha hızlı çalışır. –

+0

Teşekkürler, eğer yapabilirsem tüm cevapları kabul ediyorum! –

+0

@RomanKuzmin bunun için teşekkürler, bu tür bir 'foreach' kullanmayın! Daha hızlı bir aleyhte yüzde değeriniz var mı? teşekkürler –

2

replace kullanabilirsiniz operatörü:

PS> 'file1.txt','file2.txt','file3.txt' -replace '(^.+$)','C:\temp\$1' 

C:\temp\file1.txt 
C:\temp\file2.txt 
C:\temp\file3.txt 
İlgili konular