2012-06-19 97 views
0

我們從CCNET移動的TeamCity所以我的問題可能只是無知,但無論如何:捕捉CMD輸出

我有一個CMD線黑客對於「待辦事項」的意見和輸出的計數檢查編譯:

findstr /s /i "TODO" *.cs | find /c "":"" 

findstr /s /i TODO *.cs | find /c "":"" >todo.txt 

現在我想,如果它是大於0到構建失敗,但我有麻煩搞清楚如何做到這一點。 我相信,如果我可以將結果注入到構建日誌中,它將是最好的。

我該怎麼做?

回答

0

事實證明,這不是我的cmdline問題,而是我從teamcity中調用它的方式。仍然你的輸入dbenham是非常有用的,因爲我可以通過你的建議失敗的構建,並仍然顯示違規行數。

非常感激:)如下圖所示

的正確用法!

picture of buildstep in teamcity with the command line properly setup

1

如果我正確理解了您的要求,如果您發現至少有一行包含字符串TODO的.cs文件中出現「構建失敗」以及? (其他一些字符串)。

我相信你的FIND命令壞了。如所寫,它在名爲:的文件內查找空字符串。我相信你想搜索管道FINDSTR命令的輸出。但我不明白你想用FIND查找什麼字符串。

查找搜索字符串必須用雙引號括起來 - "search"。如果搜索包含雙引號,則每個雙引號必須用另一個雙引號進行轉義。要搜索She said "Hello",您需要購買"She said ""Hello"""

我懷疑你使用FIND命令,因爲你想要計數。但是因爲你只是在尋找字符串的存在(count> 0),所以你不需要實際的計數。可以將輸出重定向到nul,如果找到字符串,則可以使用運算符來執行操作。

您應該可以使用正則表達式使用單個FINDSTR命令執行搜索。我會假設你正在尋找任何包含:的行,然後是TODO(不區分大小寫)。表達式.*與除換行符0或更多次以外的任何字符匹配。所以你的搜索字符串將是:.*TODO。如果我得到了:錯誤,並且您需要在搜索中包含雙引號,則每個雙引號需要使用反斜槓(例如\")進行轉義。

您正在做所有子目錄中的遞歸不區分大小寫的正則表達式搜索,因此您需要/s,/r/i選項。

除非您使用/c:選項,否則FINDSTR將在每個空間將任何字符串拆分爲多個搜索。我不認爲你的搜索有空間,但我喜歡以任何方式使用/c選項。通常搜索字符串也用雙引號引起來。

完整的命令將

>nul findstr /sri /c:":.*TODO" *.cs && echo Do something to make the build fail 

我的問題是我不知道的TeamCity,所以我不知道如何信號的TeamCity中止構建。如果找到搜索字符串,我只是打印出一條消息,但顯然需要採取其他一些操作。

編輯迴應評論

OK - 根據您的評論它看起來像TeamCity的逃脫與另一雙引號雙引號。因此,在原始問題中實際執行的命令變爲

findstr /s /i TODO *.cs | find /c ":" >todo.txt 

這就如您所說的那樣完美無缺。

在這種情況下,我建議使用單個FINDSTR應該是完美的。由於您的搜索不需要空格,我們可以一起消除引號。如果TeamCity可以檢查返回的錯誤代碼並採取行動,那麼它非常簡單。

>nul findstr /sri :.*TODO *.cs 

如果找到字符串,錯誤代碼將爲0,如果未找到,則爲1。

如果您需要的錯誤代碼爲1,如果發現和0,如果沒有找到,然後只需使用

>nul findstr /sri :.*TOTO *.cs && (exit 1) || (exit 0) 


如果你真的想使用原來的命令

findstr /s /i "TODO" *.cs | >nul find /c "":"" 

將返回錯誤代碼0,如果找不到,則爲1如果找不到

findstr /s /i "TODO" *.cs | >nul find /c "":"" && (exit 1) || (exit 0) 

將返回錯誤代碼1,如果找到,如果找不到0,則返回0

+0

回答第一部分:不,我不覺得find命令打破,因爲它工作在FINDSTR報告的文件列表,在這待完成我的命令窗口,找到數多少:有在該列表,因爲他們都以「d:」開頭 - 哦,雙重雙引號:是因爲teamcity由於某種原因在調用cmd時刪除它們 – zzzuperfly

+0

我的問題是我的腳本在目標comp上運行時返回57和cmd,然後完成與錯誤代碼0和buildlog中唯一記錄的是錯誤代碼 – zzzuperfly

+0

噢和* .cs確保findstr只在.cs文件中查找,如果這意味着什麼? – zzzuperfly