我正在尝试执行一个.bat
包含一组命令的文件,这些命令可以通过命令行单独执行,但不能通过脚本一起执行:
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
cd C:\pathname
msbuild filename.vcproj
cd Debug
filename.exe
基本上,我想调用 Visual Studio 命令行,然后通过它构建一个项目,然后运行生成的.exe
。
当命令行环境变量设置为指向 Visual Studio 时,脚本会在第一行停止;如下所示:
C:\用户\我的用户名\桌面> C:\Windows\system32\cmd.exe /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86 设置使用 Microsoft Visual Studio 2008 x86 工具的环境。 C:\用户\我的用户名\桌面>
其余命令不会被调用并且脚本到此结束。
/k 选项指示运行命令并返回命令行,这是问题吗?有什么建议可以解决这个问题吗?
答案1
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86
cd C:\pathname
msbuild filename.vcproj
cd Debug
filename.exe
解释:
VCVarsall.bat
是 Visual Studio 中的 Visual Studio 命令提示符工具。它是允许您设置集成开发环境 (IDE) 的各种选项的工具,以及构建、调试和部署项目 从命令行。
阅读VCVarsall.bat
,你可以看到“的方式设置各种选项“:它调用进一步的脚本来检查某些文件夹(例如HTML Help Workshop
),一些注册表项, 一些 环境变量(例如%VS90COMNTOOLS%
)等等。如有必要,它会使用命令(重新)定义一些环境变量(例如%LIBPATH%
甚至%PATH%
)set
。
根据命令行参考,%comspec%
命令将启动命令解释器的新实例(cmd.exe
)。不幸的是,对环境变量所做的任何更改都不会影响计算机上已在运行的其他 CMD 会话!
因此,使用call "...\vcvarsall.bat" x86
(注意"
双引号是没有翻倍。) 读:call
从另一个批处理程序调用一个批处理程序而不停止父批处理程序。
答案2
如果您想要将被调用批处理文件的控制返回到调用批处理,请使用 call 命令call /?
。。