2009-07-21 48 views
4

我試圖將所有的svn:屬性的一組管道文件:

dir * -include *.cs | Select-String -simplematch -pattern "HeadURL$" | select filename | svn propset svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_ 

我獲得以下錯誤:

svn: Try 'svn help' for more info 
svn: Explicit target required ('HeadURL Id LastChangedBy LastChangedRevision' interpreted as prop value) 

的問題是,$ _沒有傳遞到SVN propset ...

怎麼辦?

回答

9

對於$_有一個值,你必須在它實際設置的上下文中使用它。對於您的具體方案,這意味着你必須換你來svn呼叫轉變爲ForEach-Object的cmdlet:

dir * -include *.cs | Select-String -simplematch -pattern "HeadURL$" | select filename | % { svn propset svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_ } 

(我在這裏使用的%別名爲簡潔)

內部的ForEach變量$_有價值並且可以使用。

但是,我已經看到了一些用途,其中當管道對象在管道到非cmdlet時被附加到程序的參數。儘管如此,我還沒有完全明白。

但要理解你在這裏做的是什麼:你試圖在每個使用其中一個文件的文件上設置svn:keywords。一個可能更強大和可讀性的方法是實際過濾列表要掃描:

gci * -inc *.cs | 
Where-Object { 
    (Get-Content $_) -match 'HeadURL$' 
} 

(可能的工作,還沒有測試)

然後,您可以只是管道是爲繼續的foreach:

| ForEach-Object { 
    svn ps svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_.FullName 
} 

而且,在這裏你可以訪問該文件對象的所有屬性,而不需要依賴對象Select-String給你上。

+0

嗨。非常感謝您的幫助!我在博客上寫了我的解決方案: http://startbigthinksmall.wordpress.com/2009/07/27/setting-svnkeywords-for-specific-files-with-windows-powershell-or-grep-with-powershell/ – 2009-07-27 15:33:35

相關問題