programing

Powershell 배열의 각 항목을 새 배열로 선택/매핑

lastmoon 2023. 7. 31. 21:48
반응형

Powershell 배열의 각 항목을 새 배열로 선택/매핑

Powershell에 파일 이름 배열이 있는데 각 파일 이름에 대한 경로를 추가하여 새 배열로 결과를 얻고 싶습니다.

C#에서는 Linq를 사용하여 이 작업을 수행할 수 있습니다...

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

하지만 파워셸에서 이것을 하는 관용적인 방법은 무엇입니까?제가 사용할 수 있는 각 구문에 대한 설명이 있는 것처럼 보이지만, 더 간결하고 기능적인 방법이 있어야 한다고 생각합니다.

Powershell의 배열은 다음과 같이 선언됩니다.@()통사론%의 줄임말입니다.foreach-object모든 파일 이름을 사용하여 배열을 선언하고 각 파일 이름을 반복합니다.join-path경로와 하위 경로를 단일 경로로 결합합니다.

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

출력:

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

NB: 입력이 단일 요소로 구성된 경우 각 요소에 대해 컬렉션을 반환하지 않습니다.배열을 원하는 경우 명시적 유형을 사용하거나 결과를 줄바꿈합니다.이렇게.

[array]$pFiles = $files | % {join-path "c:\temp" $_ }
$pFiles = @($files | % {join-path "c:\temp" $_ })

다음과 같이:

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

저는 각각 이것을 이해할 수 없습니다.미안하다

파워셸을 위한 조시 아인슈타인 LINQ의 훌륭한 작업 사용.

다음과 같이 쓸 수 있습니다.

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

LINQ 방식으로 동일한 결과를 가지지만 각 방식에 대해 for를 사용하지 않음%).

교체 연산자를 사용할 수도 있습니다.

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

C:\temp\file1.txt
C:\temp\file2.txt
C:\temp\file3.txt

언급URL : https://stackoverflow.com/questions/8908879/select-map-each-item-of-a-powershell-array-to-a-new-array

반응형