5

我正在编写一个批处理文件来使用 Visual C++ 运行一些构建。我想“撤消”脚本末尾的 vsvars32.bat/vcvarsXX.bat 更改,以便我在脚本运行之前保持环境不变。

示例 1 - 使用 vsvars32.bat

call %VS100COMNTOOLS%vsvars32.bat
devenv myProject.sln /Build "Debug|Win32"
:: Now undo vsvars32.bat

示例 2 - 使用 vcvars32.bat 和 vcvars64.bat

<path to VC bin>vcvars32.bat
:: cmd line build calls for 32 bit application
:: Now undo vcvars32.bat

<path to VC bin>amd64\vcvars64.bat
:: cmd line build calls for 64 bit application
:: Now undo vcvars64.bat

有什么建议么?

4

2 回答 2

11

解决方案很简单 - SETLOCAL 加上 ENDLOCAL。键入HELP SETLOCALHELP ENDLOCAL以获取有关使用情况的更多信息。

示例 1:

setlocal
call %VS100COMNTOOLS%vsvars32.bat
devenv myProject.sln /Build "Debug|Win32"
endlocal

示例 2:

setlocal
<path to VC bin>vcvars32.bat
:: cmd line build calls for 32 bit application
endlocal

setlocal    
<path to VC bin>amd64\vcvars64.bat
:: cmd line build calls for 64 bit application
endlocal
于 2013-02-20T00:54:10.730 回答
1

如果您的 build.bat 将由以下方式调用,则会更简单:

cmd.exe /c build.bat

这将:

  1. 使用当前环境的副本创建子进程。
  2. 修改这个环境。
  3. 在修改后的子环境中运行构建。
  4. 在进程退出时丢弃子环境。

因此,当前环境不会发生任何变化,也不需要清理。

于 2013-11-26T13:12:22.280 回答