从powershell调用vcvarsall.bat后运行构建脚本

时间:2016-12-30 16:48:36

标签: c visual-studio powershell cmd build

我正在尝试运行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会话并正确延迟环境变量扩展?也许这种方法是错误的......

1 个答案:

答案 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

......或者你需要的任何东西。

本文还介绍了一些可以轻松保存和恢复环境变量的函数。