2012-01-18 3 views
21

Powershell에 파일 이름 배열이 있는데, 각각에 경로를 추가하고 결과를 새로운 배열로 가져 오려고합니다. Linq에를 사용하여 내가 이것을 할 수있는 C#에서 Powershell 배열의 각 항목을 새 배열로 배열/배열하십시오.

...

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

그러나 PowerShell에서이 작업을 수행 할 수있는 관용적 인 방법은 무엇입니까? 사용할 수있는 foreach 구문이있는 것 같지만이를 수행하는 데 더 간결하고 기능적인 방법이 있어야한다고 생각합니다. 이처럼

답변

35

Powershell의 배열은 @() 구문으로 선언됩니다. %foreach-object의 약자입니다. foreach를 사용하여 모든 파일 이름과 루프를 가진 배열을 선언합시다. join-path은 경로와 하위 경로를 단일 경로로 결합합니다.

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

출력 :

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

고마워, 나는 그 속기에 관해서 아무것도 보지 못했다. –

+0

소스 배열의 결과가 배열이 아닌 것보다 1 요소 만있는 것처럼 보이는 것이 좋습니다 ...이게 당신의 이해입니까? – chosenbreed37

+0

@ chosenbreed37 이것은 약 4 세의 질문입니다. 새로운 소식을 올리면 커뮤니티에서 더 많은 관심을받을 수 있습니다. – vonPryz

2

: 나는 foreach는 O/승이를 알아낼 수 없습니다

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

. 조쉬 아인슈타인에서 LINQ for Powershell

를 훌륭한 일을 사용

죄송합니다 당신이 쓸 수 있습니다 :

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

는 LINQ 방식으로 동일한 결과를 가지고 있지만, foreach는 (%)를 사용하지.

+3

w /이 $ C = $'될 것 foreach''오 A | . {process {$ b + $ _}}'. 그것은 기본적으로 동일하지만 더 빨리 작동합니다. –

+0

고마워, 내가 할 수만 있다면이 모든 대답을 받아 들일거야! –

+0

@RomanKuzmin 'foreach'와 같은 이런 종류의 것을 사용하지 마십시오! 더 빠른 수행면에서 %의 가치를 어느 정도 존중합니까? 감사합니다 –

2

당신은 또한 대체 사용할 수있는 연산자

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

C:\temp\file1.txt 
C:\temp\file2.txt 
C:\temp\file3.txt 
관련 문제