2012-01-09 55 views
2

我正在使用批處理文件來只更新那些在我的SVN存儲庫中發生更改的文件。這是我的批處理文件的一部分:批處理FOR/F和文件/路徑名和空間使用令牌?

SET CHANGES=svnlook changed c:\myrepository 
FOR /F "usebackq tokens=2" %%a IN (`%CHANGES%`) DO (echo %%a) 

我只得到DOK代替DOK version1.txt,我猜是因爲空間的多數民衆贊成。即使有空間,我如何更改代碼以獲取文件名?那是因爲令牌還是它在哪裏切斷了名字?

svnlook的的輸出看起來像:

d Testprojekt /中繼/ DOK - Kopie(2).txt文件
d Testprojekt /中繼/ DOK - Kopie(3).txt文件
d Testprojekt /中繼線/ dok - Kopie(4).txt

因此,我使用tokens = 2僅獲取路徑(Testprojekt/trunk/dok - Kopie(2).txt)而不是動作(例如D =刪除)。

謝謝!

+0

能否請您編輯的問題,並添加原料svnlook的輸出樣本的休息嗎? – 2012-01-09 12:26:12

+0

是的,我增加了輸出... – EOB 2012-01-09 12:31:24

回答

3

嘗試使用:

FOR /F "usebackq tokens=1,*" %%a IN (`%CHANGES%`) DO (echo %%b) 

這第一個令牌分配給一個%和隨後的所有的人到下一個字母,即%B

+0

是的,這是一個開始,我現在以正確的方式獲得路徑...給我一些秒進一步測試。 – EOB 2012-01-09 12:44:41

+0

該死的,你在我做一些研究的時候得到了答案xD – 2012-01-09 12:47:12

+0

是的,那就是:)。 – EOB 2012-01-09 12:48:55

2

有了這個輸出:

D Testprojekt/trunk/dok - Kopie (2).txt 
D Testprojekt/trunk/dok - Kopie (3).txt 
D Testprojekt/trunk/dok - Kopie (4).txt 

.. 。你可以試試這個:

FOR /F "usebackq tokens=1*" %%a IN (`%CHANGES%`) DO (
    echo %%b 
) 

tokens=1*位表示:

  1. 將第一個標記存儲到%% a(即, D
  2. Store上線進入%% b