【问题标题】:How to pass the current powershell pipe-object "$_" as a command line arg?如何将当前的 powershell 管道对象“$_”作为命令行参数传递?
【发布时间】:2010-11-12 15:45:31
【问题描述】:

我正在尝试在一组管道文件上设置所有 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...

怎么办?

【问题讨论】:

    标签: svn powershell


    【解决方案1】:

    要使$_ 具有值,您必须在实际设置它的上下文中使用它。对于您的特定情况,这意味着您必须将对 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给你的对象。

    【讨论】:

    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多