2010-12-28 44 views
8

Điều này có thể lạ, nhưng hãy ở lại với tôi. Tôi muốn chỉ nhận được phần tử cuối cùng của kết quả đường ống được gán cho một biến thể. Tôi biết làm thế nào tôi sẽ làm điều này trong mã "thường xuyên" của khóa học, nhưng vì đây phải là một lớp lót.Lấy yếu tố cuối cùng của đường ống trong powershell

Cụ thể hơn, tôi quan tâm đến việc mở rộng tệp khi nhận kết quả từ yêu cầu FTP ListDirectoryDetails.

Vì điều này được thực hiện trong một chuỗi mở rộng, tôi không thể tìm ra mã thích hợp.

Hiện tại tôi đang nhận được 3 hars cuối cùng, nhưng điều đó thực sự khó chịu.

 
New-Object PSObject -Property @{
LastWriteTime = [DateTime]::ParseExact($tempDate, "MMM dd HH:mm",[System.Globalization.CultureInfo]::InvariantCulture)
Type = $(if([int]$tempSize -eq 0) { "Directory" } else { $tempName.SubString($tempName.length-3,3) })
Name = $tempName
Size = [int]$tempSize
}

Ý tưởng của tôi đang làm một cái gì đó tương tự như

 
    $tempName.Split(".") | ? {$_ -eq $input[$input.Length-1]}

có nghĩa là, lặp trên tất cả, nhưng chỉ đưa ra nơi các yếu tố tôi nhìn vào là cuối cùng một trong những mảng đầu vào.

Tôi đang thiếu gì?

Trả lời

16

Một số cách để làm điều này:

$name = 'c:\temp\aaa.bbb.ccc' 

# way 1 
$name.Split('.') | Select-Object -Last 1 

# way 2 
[System.IO.Path]::GetExtension($name) 

# or if the dot is not needed 
[System.IO.Path]::GetExtension($name).TrimStart('.') 
9

Nói chung, nhận được yếu tố cuối cùng trong các đường ống sẽ được thực hiện bằng Select -Last 1 như La Mã gợi ý ở trên. Tuy nhiên, một cách thay thế và dễ dàng hơn để thực hiện việc này nếu đầu vào là một mảng đơn giản là sử dụng cắt mảng ví dụ:

PS> $name = "c:\temp\aaa.bbb.txt" 
PS> $name.Split('.')[-1] 
txt 

Bạn có ý định lấy đuôi hoặc tên tệp của tệp không? Bởi vì dường như thuộc tính Type đã chứa phần mở rộng cho tên tệp.

Các vấn đề liên quan