您在子进程中设置的环境变量无法传递给调用进程。进程的环境是其父进程环境的副本,但反之则不然。但是,您可以简单地在 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 中 http://svn.lando.us/joey/Public/SO/3114146但在这里复制,因为它们无论如何都很简短:
@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