我正在尝试运行Visual Studio(开发人员cmd提示符)环境变量安装批处理文件,然后在Powershell脚本中运行构建脚本,如下所示:
cmd /v:on/k "(""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64_x86 && C:\buildscript.cmd --build-options)"
然而,似乎vcvarsall.bat建立的环境设置不会保留用于构建脚本调用。即没有默认的编译器设置等
与/v:on
开关组合的/k
是否实际上没有使用相同的cmd会话并正确延迟环境变量扩展?也许这种方法是错误的......
答案 0 :(得分:2)
问题在于,当您运行cmd.exe
来运行批处理文件时,变量会在cmd.exe
的实例中设置,但在该实例终止后它们会消失。
要解决此问题,可以使用本文中的Invoke-CmdScript函数:
Windows IT Pro: Take Charge of Environment Variables in PowerShell
功能如下:
# Invokes a Cmd.exe shell script and updates the environment.
function Invoke-CmdScript {
param(
[String] $scriptName
)
$cmdLine = """$scriptName"" $args & set"
& $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
select-string '^([^=]*)=(.*)$' | foreach-object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
set-item Env:$varName $varValue
}
}
您可以将此功能添加到PowerShell配置文件或将其用作脚本文件。
一旦定义了该功能,就可以运行命令:
Invoke-CmdScript "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86
C:\buildscript.cmd --build-options
......或者你需要的任何东西。
本文还介绍了一些可以轻松保存和恢复环境变量的函数。