Visual c++ 运行vcvars32.bat后如何重置环境 我正在编写一个批处理文件,使用VisualC++来运行一些构建。我希望在脚本结束时“撤消”vsvars32.bat/vcvarsXX.bat更改,以便在脚本运行之前保持环境不变

Visual c++ 运行vcvars32.bat后如何重置环境 我正在编写一个批处理文件,使用VisualC++来运行一些构建。我希望在脚本结束时“撤消”vsvars32.bat/vcvarsXX.bat更改,以便在脚本运行之前保持环境不变,visual-c++,command-line,batch-file,Visual C++,Command Line,Batch File,示例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 vcv

示例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
vcvars32.bat
::用于32位应用程序的cmd行生成调用
::现在撤消vcvars32.bat
amd64\vcvars64.bat
::64位应用程序的cmd行生成调用
::现在撤消vcvars64.bat

有什么建议吗?

解决方案很简单-SETLOCAL与ENDLOCAL相结合。键入
HELP SETLOCAL
HELP 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
setlocal
vcvars32.bat
::用于32位应用程序的cmd行生成调用
端部
setlocal
amd64\vcvars64.bat
::64位应用程序的cmd行生成调用
端部

如果通过以下方式调用build.bat会更简单:

cmd.exe /c build.bat
这将:

  • 使用当前环境的副本创建子进程
  • 修改此环境
  • 在修改的子环境中运行生成
  • 在进程退出时放弃子环境
  • 所以在当前环境中不会发生任何变化,也不需要进行清理