In a batch file, combining two strings to create a combined path string

陌路散爱 提交于 2019-12-23 10:51:20

问题


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?


回答1:


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:

for /f "delims=" %%x in ('powershell -file foo.ps1') do set joinedpath=%%x

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:

:joinpath
set Path1=%~1
set Path2=%~2
if {%Path1:~-1,1%}=={\} (set Result=%Path1%%Path2%) else (set Result=%Path1%\%Path2%)
goto :eof

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:

JoinPath "C:\trunk" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt
JoinPath "C:\trunk\" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt

The code and sample batch file can be found in my SVN but are reproduced here since they're quite brief anyway:

@echo off
echo JoinPath "C:\trunk" "ProjectName\Project.txt"
call :joinpath "C:\trunk" "ProjectName\Project.txt"
echo -- %Result%

echo JoinPath "C:\trunk\" "ProjectName\Project.txt"
call :joinpath "C:\trunk\" "ProjectName\Project.txt"
echo -- %Result%

goto :eof

:joinpath
set Path1=%~1
set Path2=%~2
if {%Path1:~-1,1%}=={\} (set Result=%Path1%%Path2%) else (set Result=%Path1%\%Path2%)
goto :eof


来源:https://stackoverflow.com/questions/3114146/in-a-batch-file-combining-two-strings-to-create-a-combined-path-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!