【问题标题】:piping get-childitem into select-string in powershell在powershell中将get-childitem管道传输到select-string
【发布时间】:2013-04-05 14:30:22
【问题描述】:

我正在对一个大型文件目录进行排序,我试图从 ls 命令的输出中选择单独的行并仅显示这些行,但我得到了奇怪的结果,而且我对 powershell 不够熟悉,不知道我在做什么做错了。

这种方法有效:

ls > data.txt
select-string 2012 data.txt
rm data.txt

但是对我来说创建一个文件只是为了读取我已经必须填写到文件中的数据似乎很浪费。我想将输出直接传送到选择字符串。

我已经尝试过这种方法:

ls | select-string 2012

但这并没有给我适当的输出。

我的 猜测 是我需要将 ls 的输出转换为 select-string 可以使用的东西,但我不知道该怎么做,甚至不知道这是否真的是正确的方法.

【问题讨论】:

    标签: powershell get-childitem


    【解决方案1】:

    PowerShell 是面向对象的,而不是像cmd 这样的纯文本。如果要获取 2012 年修改的文件对象(行),请使用:

    Get-ChildItem | Where-Object { $_.LastWriteTime.Year -eq 2012 }
    

    如果要获取文件名中带有“2012”的文件对象,请尝试:

    Get-ChildItem *2012*
    

    当你使用

    ls | select-string 2012
    

    您实际上是在 ls / get-childitem 列出的每个文件中搜索带有“2012”的行。

    如果您确实需要在get-childitem 的输出上使用select-string,请尝试将其转换为字符串,然后拆分为行然后搜索它。像这样:

    (Get-ChildItem | Out-String) -split "`n" | Select-String 2012
    

    【讨论】:

    • 非常感谢,这基本上涵盖了我需要的一切。我从一开始就怀疑 powershell 正在对对象做一些事情,但我不知道如何使它成为文本。
    【解决方案2】:

    我发现了另一种将对象转换为字符串的简单方法:

    Get-ChildItem | Out-String -stream | Select-String 2012
    

    在这篇非常有趣的文章中:
    http://blogs.msdn.com/b/powershell/archive/2006/04/25/how-does-select-string-work-with-pipelines-of-objects.aspx

    如果您希望 Select-String 处理 Monad 格式的输出,则需要将其作为字符串获取。这是需要了解的事情 我们的输出。当您的命令序列发出字符串流时, 我们在不处理的情况下发出它。相反,您的命令序列 发出一个对象流,然后我们将这些对象重定向到 命令 Out-Default。 Out-Default 查看对象的类型和 注册的格式化元数据看是否有默认视图 对于该对象类型。视图定义了 FORMATTER 和元数据 那个命令。大多数对象都被矢量化到 Format-Table 或 Format-List(尽管他们可以转到 Format-Wide 或 Format-Custom)。 这些格式化程序不会发出字符串!你可以自己看看这个 通过以下内容:“然后将这些格式化记录向量化到 OUT-xxx 命令被渲染成适当的数据 特定的输出设备。默认情况下,它们会转到 Out-Host 但您可以 通过管道将其传送到 Out-File、Out-Printer 或 Out-String。 (注:这些 OUT-xxx 命令非常聪明,如果您将格式化对象通过管道传输到 他们,他们会渲染它们。如果您将原始对象传递给他们,他们会 首先调用适当的格式化程序,然后渲染它们。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2015-02-28
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多