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