2009-09-24 76 views

回答

39

原來,問題是斯科特的例子不包括call命令在線的開始。只要您不想使用不同的參數多次執行.bat文件,就可以。

此:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config" 
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config" 

爲我工作得很好。

+1

在VS2008中將多個CMD文件放在不同的行上不起作用。 VS只調用build上的第一個腳本。我在每行前添加了CALL,然後全部工作。 – 2010-10-13 21:10:31

+0

爲什麼你要問這些'call'命令?請參閱[這裏](https://msdn.microsoft.com/en-us/library/ms165412.aspx)。 – Pascal 2017-02-04 20:46:40

0

您應該能夠將這些命令放在一個單獨的行上,然後每個命令將按順序執行。另外,一個「騙子」的方式做同樣的事情如下:

  • 創建一個運行的新功能所需部分的第二批處理文件,然後創建一個運行兩個組件批處理文件父批處理,並在預生成事件中運行新批處理。例如:batch1.bat修改文件1,batch2.bat修改文件2,然後batch3.bat同時運行batch1.bat和batch2.bat
+1

他們分開行,但他們似乎正在執行爲一體。我已經考慮過bat文件的方法,但它似乎是一種解決方法,而不是一種解決方案。 – Kirschstein 2009-09-24 16:12:57

+0

奇怪。我會提供其他建議(如添加分號作爲分隔符),但我只是在抓住吸管。抱歉! – MBillock 2009-09-24 17:11:29

5

我在Windows 7 64位上使用Visual Studio 2010。

我發現了一個解決方案,是更好的我喜歡的,我與&& ^鏈接命令在一起,例如,編輯我.vcxproj xml文件像這樣:

<PreBuildEvent> 
     <Command>echo "hello 1" &amp;&amp;^
echo "hello 2" &amp;&amp;^
echo "hello 3"</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

我鏈式三個命令在一起。 '& &'告訴shell在以前的命令出錯時停止執行。

注意,在.xml文件中,不能直接使用&&,所以'& amp; amp;'& amp;'必須使用。還要注意使用^字符,這是cmd shell的續行字符(如BASH的\ char)。

每個新命令都必須從行首開始。使用這種方法,可以鏈接儘可能多的命令,但如果失敗,鏈中的其餘部分將不會執行。

這裏是我的實際用例,我正在執行一些環境檢查與Python腳本,隨後是複製我的預編譯的頭的調試文件到另一個子項目的目錄:

<PreBuildEvent> 
     <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp;^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

> nul使用上覆制命令防止顯示生成窗口的任何輸出,所以我的隊友們不會得到嚇壞了,當它說0 file(s) copied.

參考共享個子項目之間的預編譯頭是在這裏:

Sharing precompiled headers between projects in Visual Studio

相關問題