我正在尝试在一组管道文件上设置所有svn:property:
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 ...
怎么办?
答案 0 :(得分:10)
要使$_
具有值,您必须在实际设置的上下文中使用它。对于您的特定方案,这意味着您必须将对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
给您的对象。