Переменные среды, которые вы установили в подпроцессе, не могут быть переданы вызывающему процессу.Среда процесса является копией родительской среды, но не наоборот.Однако вы можете просто вывести результат в PowerShell и прочитать этот вывод из пакетного файла:
for /f "delims=" %%x in ('powershell -file foo.ps1') do set joinedpath=%%x
Тем не менее, поскольку PowerShell требуется около секунды для запуска, это может быть неоптимальным.Конечно, вы можете сделать это в пакетном файле со следующей маленькой подпрограммой:
:joinpath
set Path1=%~1
set Path2=%~2
if {%Path1:~-1,1%}=={\} (set Result=%Path1%%Path2%) else (set Result=%Path1%\%Path2%)
goto :eof
Это просто смотрит на самый последний символ первой строки и, если это не обратный слеш, он добавит один между двумя -довольно просто, на самом деле.
Пример вывода:
JoinPath "C:\trunk" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt
JoinPath "C:\trunk\" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt
Код и образец командного файла можно найти в моем SVN , но они воспроизводятся здесь, поскольку они довольнократко в любом случае:
@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