Choose Object > Path > Join. Notice that the anchor points on the left side of the paths are now joined with a path. If you want to join specific anchor points from separate paths, select the anchor points and press Command+J (Mac OS) or Ctrl+J (Windows). Choose Object > Path > Join once more.
Combines two strings into a path. Combine(String, String, String) Combines three strings into a path. Combine(String, String, String, String) Combines four strings into a path.
path. join() method in Python join one or more path components intelligently. This method concatenates various path components with exactly one directory separator ('/') following each non-empty part except the last path component.
You can use the .NET Path class:
[IO.Path]::Combine('C:\', 'Foo', 'Bar')
Since Join-Path can be piped a path value, you can pipe multiple Join-Path statements together:
Join-Path "C:" -ChildPath "Windows" | Join-Path -ChildPath "system32" | Join-Path -ChildPath "drivers"
It's not as terse as you would probably like it to be, but it's fully PowerShell and is relatively easy to read.
Since PowerShell 6.0, Join-Path has a new parameter called -AdditionalChildPath
and can combine multiple parts of a path out-of-the-box. Either by providing the extra parameter or by just supplying a list of elements.
Example from the documentation:
Join-Path a b c d e f g
a\b\c\d\e\f\g
So in PowerShell 6.0 and above your variant
$path = Join-Path C: "Program Files" "Microsoft Office"
works as expected!
Join-Path is not exactly what you are looking for. It has multiple uses but not the one you are looking for. An example from Partying with Join-Path:
Join-Path C:\hello,d:\goodbye,e:\hola,f:\adios world
C:\hello\world
d:\goodbye\world
e:\hola\world
f:\adios\world
You see that it accepts an array of strings, and it concatenates the child string to each creating full paths. In your example, $path = join-path C: "Program Files" "Microsoft Office"
. You are getting the error since you are passing three positional arguments and join-path
only accepts two. What you are looking for is a -join
, and I could see this being a misunderstanding. Consider instead this with your example:
"C:","Program Files","Microsoft Office" -join "\"
-Join
takes the array of items and concatenates them with \
into a single string.
C:\Program Files\Microsoft Office
Minor attempt at a salvage
Yes, I will agree that this answer is better, but mine could still work. Comments suggest there could be an issue with slashes, so to keep with my concatenation approach you could do this as well.
"C:","\\Program Files\","Microsoft Office\" -join "\" -replace "(?!^\\)\\{2,}","\"
So if there are issues with extra slashes it could be handled as long as they are not in the beginning of the string (allows UNC paths). [io.path]::combine('c:\', 'foo', '\bar\')
would not work as expected and mine would account for that. Both require proper strings for input as you cannot account for all scenarios. Consider both approaches, but, yes, the other higher-rated answer is more terse, and I didn't even know it existed.
Also, would like to point out, my answer explains how what the OP doing was wrong on top of providing a suggestion to address the core problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With