Я должен взять две строки и объединить их в единственную строку пути в пакетном файле, подобном Пути. Метод объединения в.NET. Например, ли строки будут "C:\trunk" и "ProjectName\Project.txt" или "C:\trunk\" и "ProjectName\Project.txt", то объединенный путь будет "C:\trunk\ProjectName\Project.txt".
Я попытался использовать команду пути объединения PowerShell, которая работает, но мне нужен способ пасовать назад это значение к пакетному файлу. Я пытался использовать переменные среды для этого, но я не был успешен. Одна опция для меня состоит в том, чтобы переместить весь этот код в сценарий PowerShell и избежать пакетного файла в целом. Однако, если бы я должен был сделать это в пакетном файле, как я сделал бы это?
Переменные среды, которые вы установили в подпроцессе, не могут быть переданы вызывающему процессу. Среда процесса является копией родительского, но не наоборот. Однако вы можете просто вывести результат в 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