2013-07-09 64 views
0

需要與svn post-commit批處理腳本一點幫助。在這裏我有什麼:SVN後執行批處理腳本行爲不同於正常執行

後commit.bat:

1. @ECHO OFF 
2. cd D:\Subversion\...\hooks 
3. SET OUTPUT = default 
4. FOR /F "tokens=*" %%a in ('revision.bat') do (SET OUTPUT=%%a) 
5. findstr /m "Autobuild" D:\Subversion\...\db\revprops\0\%OUTPUT% 
6. if %errorlevel%==0 (
7. call website.bat 
8.) 

website.bat:

D:\Subversion\...\hooks\wget http://website.com/service-trigger 

revision.bat:

svnlook youngest D:\Subversion\... 

因此,這裏發生了什麼是

  1. 承諾庫後,腳本提取最後revision

  2. 使用該號碼找到在修訂日誌文件

  3. 嘗試在該日誌中找到一個特定的字符串

  4. 如果特定字符串存在,則激發一些URL

我的問題是,這個腳本是直接從cmd調用時執行的,但是當SVN調用它時,似乎奇怪的發生在第5行,因爲我沒有收到任何錯誤,但是第7行從來沒有被調用過。

我猜想,也許我應該運行腳本作爲管理員,但因爲我從來沒有認真地編程,適用於Windows,我不知道,我需要一些幫助

回答

1

空間是SET聲明顯著。在3號線,要設置一個變量"output ""output"

在3行中刪除=周圍的空間,並在第4行的%%a

而且(只有在這裏,但化妝品) - 尚不清楚是否...是(省略)或(家長父母)。如果絕對文件名包含空格,"quote it"

也可能是您的起始目錄是每次調用不同。第2行中的cd更改D:驅動器上的當前目錄,但不影響默認驅動器。您需要執行D:才能將默認設置切換爲驅動器D:。第4行的revision.bat是相對於默認的。

+0

好吧,如果這一切都是真的(我將能夠測試幾個小時後),那麼爲什麼我設法直接運行此腳本?附: '......'省略了部分 –

+1

它可能與您的起始目錄有關。 'cd'命令改變'D:'上的'CURRENT'目錄 - 它不會改變你記錄的(或當前的)驅動器,所以你可能會得到不同的結果,這取決於你當前的目錄是什麼。 「output」是否設置取決於當前目錄中的「revision.bat」的存在。如果它確實存在,然後使用您發佈的數據,你的'findstr'將被解析爲'FINDSTR/M 「自動構建」 d:\顛覆\ ... \ DB \的revprops \ 0 \ svnlook的最年輕的d:\顛覆\ .. 。' - 這可能不是你想要的。 – Magoo

+0

你的意思是說,如果我有兩個驅動器,C,D,那麼如果當前正在驅動器C上運行'cd D:\ Subversion \ ... \ hooks',然後調用例如'revision.bat'這是在D,而我仍然在C,那麼它將無法正常工作(我btw意識到這一點)。所以你建議在#2後面的某處我應該叫'D:'?我真的想過,但沒有嘗試 –