2009-07-21 15 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に渡されていないことプロペ...

何をする?

答えて

9

$_には、実際に設定されているコンテキストで値を使用する必要があります。

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

(私は簡潔にするため、ここで %エイリアスを使用している)こと ForEach変数 $_インサイド

があります:あなたの特定のシナリオでは、これはあなたがForEach-Objectコマンドレットにsvnにお電話をラップしなければならないことを意味します値を使用することができます。

ただし、非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/ –

関連する問題