$_
には、実際に設定されているコンテキストで値を使用する必要があります。
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
に頼る必要はありません。
こんにちは。ご協力いただき誠にありがとうございます!私は私の解決策についてブログ: http://startbigthinksmall.wordpress.com/2009/07/27/setting-svnkeywords-for-specific-files-with-windows-powershell-or-grep-with-powershell/ –