如何在批处理文件中找到最新的Visual Studio Developer命令提示符?

时间:2017-10-13 15:07:46

标签: visual-studio batch-file command-prompt

我需要编写一个批处理文件来完成Visual Studio中的预构建步骤。作为其中的一部分,我需要调用Visual Studio Developer命令提示符。

我知道对于VS2015,开发人员命令提示符位于C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat

不幸的是,我们的构建服务器有不同版本的VS.是否有一种简单的方法可以在批处理文件中为所有(或大多数)Visual Studio版本找到最新的VSDevCmd.bat,因此预构建步骤适用于两种环境?

2 个答案:

答案 0 :(得分:1)

您应使用Microsoft Visual Studio安装程序提供的vswhere。您将vswhere.exe复制到已知位置。 Wiki在how to start the developer command prompt上有描述:

@if not defined _echo echo off
for /f "usebackq delims=" %%i in (`vswhere.exe -prerelease -latest -property installationPath`) do (
  if exist "%%i\Common7\Tools\vsdevcmd.bat" (
    %comspec% /k "%%i\Common7\Tools\vsdevcmd.bat" %*
    exit /b
  )
)

rem Instance or command prompt not found
exit /b 2

答案 1 :(得分:0)

我设法凑齐了一个查看参数的批处理文件,然后在文件系统中试图弄清楚应该使用什么版本的VSDevCmd。 $(DevEnvDir)有时是*Undefined*,因此我们也需要检查一下。

在VS2015 Professional,VS2017 Professional和VS2017 Enterprise上测试。

REM Usage in VS build event: call "$(SolutionDir)\find_vsdevcmd.bat" "$(DevEnvDir)"

SET vsversion=

REM Get Visual Studio version, either from command prompt, or newest on filesystem 
if [%1] == [] (
  if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Enterprise"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Professional"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Community"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2015"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2013"
  ) else goto :eof
) else if [%1] == ["*Undefined*"] (
  if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Enterprise"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Professional"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2017 Community"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2015"
  ) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" (
    SET vsversion="VS2013"
  ) else goto :eof
) else (
  if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\"] (
    SET vsversion="VS2017 Enterprise"
  ) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\"] (
    SET vsversion="VS2017 Professional"
  ) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\"] (
    SET vsversion="VS2017 Community"
  ) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\" (
    SET vsversion="VS2015"
  ) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\" (
    SET vsversion="VS2013"
  ) else goto :eof
)

if %vsversion% == "VS2017 Enterprise" (
    SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
    ECHO VS2017 Enterprise
) else if %vsversion% == "VS2017 Professional" (
    SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat"
    ECHO VS2017 Professional
) else if %vsversion% == "VS2017 Community" (
    SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
    ECHO VS2017 Community
) else if %vsversion% == "VS2015" (
    SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
    ECHO VS2015
) else if %vsversion% == "VS2013" (
    SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
    ECHO VS2013
) else goto :eof

call %vsdevcmd%