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

Bil*_*rry 1 c powershell cmd build visual-studio

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

Bil*_*art 5

问题在于,当您运行cmd.exe运行批处理文件时,变量在的实例中设置cmd.exe,但在该实例终止后消失。

要变通解决此问题,您可以在本文中使用Invoke-CmdScript函数:

Windows IT Pro:在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
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以将此功能添加到PowerShell配置文件中,或将其用作脚本文件。

定义函数后,即可运行命令:

Invoke-CmdScript "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86
C:\buildscript.cmd --build-options
Run Code Online (Sandbox Code Playgroud)

...或您需要的任何东西。

本文还介绍了几个函数,可让您轻松保存和还原环境变量。