簡體   English   中英

如何從Powershell管道中獲取字符串數組?

[英]How do I get an array of strings from a powershell pipeline?

我有一個目錄名稱列表,我想將其轉換為絕對路徑,並刪除所有無效的名稱。 我最初的嘗試是管道

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path

但是,我得到的是[Object[]]類型而不是[String[]] 我嘗試確保路徑存在(通過在管道中添加一個? { Test-Path $_ }步驟,但這沒有幫助。

我究竟做錯了什么? 如何獲取目錄作為字符串列表? 我需要這樣做,以便可以將數組連接到另一個字符串數組,特別是

$newpath = (($env:PATH -split ';'), $paths) -join ';'

這似乎可行:

 $newpath = (@($env:PATH) + $paths) -join ';'

您實際上並不需要顯式將其強制轉換為[string []]。 Powershell將從命令上下文中找出來並將數據強制轉換為正確的類型。

object[]只是PowerShell中的默認數組,在這種(和大多數情況下)都沒有關系。 您的問題是,您正在嘗試使用(arr1, arr2)加入數組。 這是什么做實際上可以創造是有兩個數組對象的數組,因為,是一個數組建設運營商。 嘗試使用+連接數組,如下所示:

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path    

$newpath = (($env:PATH -split ';') + $paths) -join ';'

您甚至可以跳過拆分,然后執行

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path
$newpath = "$env:PATH;$($paths -join ';')"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM