如果我想要将两个字符串组合成一个文件路径,我可以像这样使用Join-Path
:
$path = Join-Path C: "Program Files"
Write-Host $path
打印"C:\Program Files"
的代码。但是,如果我想对两个以上的字符串执行此操作:
$path = Join-Path C: "Program Files" "Microsoft Office"
Write-Host $path
PowerShell抛出一个错误:
联接路径:找不到接受实参'Microsoft Office‘的位置参数。
在D:\users\ma\my_script.ps1:1字符:18
+ $path =加入路径<<<< C:“程序文件”"Microsoft Office“
+ CategoryInfo : InvalidArgument:(:)加入路径,ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
.Commands.JoinPathCommand
我尝试使用字符串数组:
[string[]] $pieces = "C:", "Program Files", "Microsoft Office"
$path = Join-Path $pieces
Write-Host $path
但是PowerShell会提示我输入子路径(因为我没有指定-childpath
参数),例如"somepath",然后创建三个文件路径。
C:\somepath
Program Files\somepath
Microsoft Office\somepath
这也是不对的。
发布于 2014-09-17 22:51:32
您可以使用.NET Path类:
[IO.Path]::Combine('C:\', 'Foo', 'Bar')
发布于 2015-02-10 08:18:18
由于Join-Path可以通过管道传递路径值,因此您可以通过管道将多条Join-Path语句输送到一起:
Join-Path "C:" -ChildPath "Windows" | Join-Path -ChildPath "system32" | Join-Path -ChildPath "drivers"
它并不像您希望的那样简洁,但它是完全PowerShell的,并且相对容易阅读。
发布于 2018-12-12 23:01:38
从PowerShell 6.0开始,Join-Path有一个名为-AdditionalChildPath
的新参数,并且可以以开箱即用的方式将路径的多个部分进行组合。通过提供额外的参数或仅提供元素列表。
来自the documentation的示例
Join-Path a b c d e f g
a\b\c\d\e\f\g
因此在PowerShell 6.0和更高版本中,您的变体
$path = Join-Path C: "Program Files" "Microsoft Office"
按照预期工作!
https://stackoverflow.com/questions/25880122
复制相似问题