2015-05-26 45 views
5

我有很多Visual Studio項目解決方案在多個目錄中(所有的擴展名爲.sln),我想編寫一個簡單的批處理腳本,它將自動構建批處理文件中列出的所有解決方案。如何從命令行爲Visual Studio創建簡單構建腳本?

我可以手動生成通過啓動一個解決方案Visual Studio Command Prompt(這僅僅是一個用下面的命令的命令行實例執行

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

在這之後我再通過調用生成項目:

devenv "path\to\solutionFile\projectSolution1.sln" /build Debug

這將構建項目(假設該項目沒有錯誤),我沖洗和重複每一個項目我想BUI LT。

然而時,我有一個批處理文件名爲如下build.bat

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 
echo "Starting Build for all Projects with proposed changes" 
echo . 
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug 
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug 
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug 
echo "All builds completed." 
pause 

批處理腳本只執行第一線,並等待,直到我在exit執行先於其他類型。基於我對批處理文件和所有StackOverflow問題所做的研究,我對此的理解是,cmd實際上調用其自身的另一個實例,該實例執行vcvarsall.bat來設置構建環境。

這不會作爲打字exit工作殺死與devenv該實例設置和之後的命令不能執行如devenv是不可識別的命令(因爲導出路徑將不再存在)

總之 ,如何實現這一點(將其餘命令傳遞給定義爲devenv的cmd實例)在一個批處理文件中?我知道這不是一種強有力的方法(並且有很多工具可以做到這一點)調用構建,但我只希望有一個批處理腳本來自動化單獨調用這些項目的手動工作。

回答

8

發現該解決方案,正如Jimmy所述,需要刪除環境變量%comspec%,因爲這是CMD.exe的快捷方式。

但是,僅刪除"%comspec" /k將導致CMD實例打開,然後在第二秒後退出。我以前也試圖與%comspec%

將溶液使用的到添加call在第一線的前面,並刪除%comspec

下面是最終的批處理文件時,其創建一個單獨的CMD實例call函數讓事情按預期工作。

@echo OFF 
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 
echo "Starting Build for all Projects with proposed changes" 
echo . 
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug 
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug 
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug 
echo . 
echo "All builds completed." 
pause 

注意@echo OFF告訴批處理腳本不回聲出命令(諸如呼叫命令)到終端(錯誤和警告仍會顯示,但是)

+1

我測試腳本,發現「呼叫」......「x86」線應該在一條新線上。我試圖編輯代碼,但SO需要至少6個字符更改... :-( –

+0

@MaartenDocter良好的捕獲,謝謝!我已更新它。代碼格式得到fudged當我通過虛擬機複製粘貼。:( – matrixanomaly

+0

太棒了!感謝您的編輯! –

2

如果這已經是一個批處理腳本,那麼這行:

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 

也許應該只是"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

爲什麼? %comspec%只是cmd.exe的環境變量快捷方式,因此如您所見,它將啓動一個指定了/ k選項的cmd新實例(如果運行cmd /?則表示Carries out the command specified by string but remains)。你並不關心它是否存在,當你已經運行你的批處理文件時,你甚至不需要一個新的cmd.exe。

相關問題