I need to take two strings and combine them into a single path string inside a batch file similar to the Path.Combine method in .NET. For example, whether the strings are “C:\trunk” and “ProjectName\Project.txt” or “C:\trunk\” and “ProjectName\Project.txt”, the combined path will be “C:\trunk\ProjectName\Project.txt”.
I have tried using PowerShell’s join-path command which works, but I need a way to pass this value back to the batch file. I tried using environment variables for that, but I wasn’t successful. One option for me is to move all that code into a PowerShell script and avoid the batch file altogether. However, if I had to do it within the batch file, how would I do it?
Environment variables you set in a subprocess cannot be passed to the calling process. A process’ environment is a copy of its parent’s but not vice versa. However, you can simply output the result in PowerShell and read that output from the batch file:
Still, since PowerShell needs about a second to start this may not be optimal. You can certainly do it in a batch file with the following little subroutine:
This simply looks at the very last character of the first string and if it’s not a backslash it will add one between the two – pretty simple, actually.
Sample output:
The code and sample batch file can be found in my SVN but are reproduced here since they’re quite brief anyway: