如何使用连接path将两个以上的string合并到文件path中?
如果我想把两个string合并成一个文件path,我使用如下的join-path : 
 $path = join-path C: "Program Files" write-host $path 
 这打印C:\Program Files" 。如果我想这样做超过两个string: 
 $path = join-path C: "Program Files" "Microsoft Office" write-host $path 
Powershell引发错误:
 Join-Path : A positional parameter cannot be found that accepts argument 'Micro soft Office'. At D:\users\ma\my_script.ps1:1 char:18 + $path = join-path <<<< C: "Program Files" "Microsoft Office" + CategoryInfo : InvalidArgument: (:) [Join-Path], ParameterBindi ngException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell .Commands.JoinPathCommand 
我尝试使用一个string数组:
 [string[]] $pieces = "C:", "Program Files", "Microsoft Office" $path = join-path $pieces write-host $path 
 但是Powershell会提示我inputchildpath(因为我没有指定-childpath参数),例如“somepath”,然后创build三个文件path, 
 C:\somepath Program Files\somepath Microsoft Office\somepath 
这也是不正确的。
您可以使用.NETpath类:
 [io.path]::combine('c:\', 'foo', 'bar') 
由于Join-Path可以传递path值,因此可以将多个Join-Path语句连接在一起:
 Join-Path "C:" -ChildPath "Windows" | Join-Path -ChildPath "system32" | Join-Path -ChildPath "drivers" 
它不像你可能会喜欢的那样简洁,但它完全是Powershell,相对容易阅读
joinpath不完全是你在找什么。 它有多种用途,但不是你正在寻找的。 joinpath聚会的一个例子
 Join-Path C:\hello,d:\goodbye,e:\hola,f:\adios world C:\hello\world d:\goodbye\world e:\hola\world f:\adios\world 
 您会看到它接受一个string数组,并将子string连接到每个创build完整path。 在你的例子中$path = join-path C: "Program Files" "Microsoft Office" 。 你正在传递错误,因为你正在传递3个位置参数,而join-path只接受2个。你在寻找的是一个join,我可以看到这是一个误解。 用你的例子来考虑一下: 
 "C:","Program Files","Microsoft Office" -join "\" 
  -Join获取项目数组并将它们与\连接成单个string。 
 C:\Program Files\Microsoft Office 
小小的企图打捞
是的,我会同意这个答案更好,但我的工作仍然可以。 意见build议可能有斜线问题,以保持我的连接方法,你也可以做到这一点。
 "C:","\\Program Files\","Microsoft Office\" -join "\" -replace "(?!^\\)\\{2,}","\" 
 所以如果有额外斜杠的问题,只要它们不在string的开头(允许UNCpath)就可以处理。  [io.path]::combine('c:\', 'foo', '\bar\')将无法按预期工作,我会考虑这一点。 两者都需要适当的stringinput,因为您不能考虑所有情况。 考虑这两种方法,但是是另一个较高的评价答案是更简洁,我甚至不知道它的存在。 
另外,想指出的是,我的答案解释了OP如何解决核心问题提出了一个build议。
 如果你仍然使用.Net 2.0那么[IO.Path]::Combine将不会有params string[]重载,你需要join两个以上的部分,你会看到错误无法find“Combine”和参数计数:“3”。 
稍微不太优雅但纯粹的Powershell解决scheme是手动聚合path部分:
 join-path C: (join-path "Program Files" "Microsoft Office") 
要么
 join-path (join-path C: "Program Files") "Microsoft Office" 
这里的东西,将做你想为ChildPath使用一个string数组。
 $path = "C:" @( "Program Files", "Microsoft Office" ) | %{ $path = Join-Path $path $_ } Write-Host $path 
哪个输出
 C:\Program Files\Microsoft Office 
我发现唯一的警告是,$path的初始值必须有一个值(不能为空或空)。