반응형
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
반응형
'programing' 카테고리의 다른 글
PL/SQL BEGIN을 중첩해야 하는 시기...END 블록? (0) | 2023.07.31 |
---|---|
모든 호출을 수정하지 않고 Retrofit을 사용하여 OAuth 토큰 새로 고침 (0) | 2023.07.31 |
스프링 부트 애플리케이션 내부에 리액트 웹 애플리케이션과 jar 패키징을 통합하는 방법 (0) | 2023.07.31 |
MySQL GROUP_CONCAT(null 포함) (0) | 2023.07.31 |
업데이트를 위해 선택...에는 항상 주문 기준이 포함되어야 합니까? (0) | 2023.07.31 |