未使用 %comspec% /k 执行的命令

未使用 %comspec% /k 执行的命令

我正在尝试执行一个.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 /?。。

相关内容