我有一个目录名列表,我希望将其转换为绝对路径,并删除任何无效路径名。我最初尝试这样做的是管道
$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path
但是,我得到的内容是[Object[]]
而不是[String[]]
。我尝试确保路径存在(通过向管道添加? { Test-Path $_ }
步骤,但这没有帮助。
我做错了什么?如何将目录作为字符串列表获取?我需要这个,以便我可以将数组连接到另一个字符串数组,特别是
$newpath = (($env:PATH -split ';'), $paths) -join ';'
答案 0 :(得分:0)
这似乎有效:
$newpath = (@($env:PATH) + $paths) -join ';'
你真的不需要将它显式地转换为[string []]。 Powershell将从命令上下文中找出并将数据强制转换为正确的类型。
答案 1 :(得分:0)
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 ';')"