在Powershell中等效的“更多”或“更少”命令?

时间:2009-07-03 11:20:42

标签: powershell

有没有办法通过将输出路由到一些'more'命令来对输出进行分页,这个命令可以在linux \ unix shell中找到?

12 个答案:

答案 0 :(得分:85)

是的,有:

some-cmdlet | out-host -paging

答案 1 :(得分:53)

嗯......有“更多”,或多或少(......)与其他平台相同。请尝试以下示例:

dir -rec | more

答案 2 :(得分:26)

dir -rec | more是不好的建议。

它将导致PowerShell在将整个命令输出到屏幕之前对其进行评估,这对于输出分页等不需要的东西

在某些极端情况下,它可能导致系统崩溃(例如dir 'C:\' | more

另一方面,使用out-host -paging会将信息输出到屏幕上。

答案 3 :(得分:25)

Powershell Community Extensions有一个名为'less'的便捷函数,它提供了更完整的Unix风格的功能集,使用less.exe的移植副本来实际处理分页。

您可以通过启动 admin shell 并运行:

来安装它
Find-Package pscx | Install-Package -Force

force将升级旧版本)

您可以将字符串传递给它,或者将文件名作为直接参数。

type foo.txt | less
less foo.txt, bar.txt, baz.txt

它适用于ConEmu和Powershell窗口,但遗憾的是它不会像你期望的那样在v2.0 ISE下工作。

答案 4 :(得分:2)

more不用于限制输出,它用于 paginate 输出,并使其更容易在终端中读取,如果有的话。

您是在谈论使用headtail吗? EggHeadCafe有一个例子:

type my.txt | select-object -first 10

type my.txt | select-object -last 10

模仿headtail

答案 5 :(得分:2)

我在我的默认配置文件中添加了一个函数定义和别名 %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

此功能主要基于this blog entry by Aman Dhally,并在分页时按Q添加了异常处理。

function more2
{
   param(
     [Parameter(ValueFromPipeline=$true)]
     [System.Management.Automation.PSObject]$InputObject
   )

   begin
   {
      $type = [System.Management.Automation.CommandTypes]::Cmdlet
      $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(‘Out-Host’, $type)
      $scriptCmd = {& $wrappedCmd @PSBoundParameters -Paging }
      $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
      $steppablePipeline.Begin($PSCmdlet)
   }

   process
   {
      try
      {
         $steppablePipeline.Process($_)
      }
      catch
      {
        break;
      }
   }

   end
   {
      $steppablePipeline.End()
   }

   #.ForwardHelpTargetName Out-Host
   #.ForwardHelpCategory Cmdlet
}

New-Alias more more2

所以我可以像dir -r | more一样调用它,立即启动分页输出,因为PowerShell的管道(而不是等待more.com的完整输出)。

答案 6 :(得分:2)

我更喜欢“less”命令而不是“more”命令。使用less命令,结果也可以向后分页而不是向前分页。

Git for Windows中的“less”对我有效(我的路径是C:\Program Files (x86)\Git\usr\less.exe。我在Powershell中遇到错误,Gow版本为“less”。

示例:

ls|less

为了保存输入,我在Powershell配置文件中添加了别名“l”:

sal l "C:\Program Files (x86)\Git\bin\less.exe"

答案 7 :(得分:1)

如果你安装了VIM,我非常喜欢dir -r | vim -R -。不幸的是,这会遇到与more相同的问题(即没有流媒体)。

答案 8 :(得分:1)

PS> cd C:\

PS> dir -r -ex 0 | out-Host -paging

PS> dir -file -r -ea 0 c:\Windows | Select FullName,Length,LastWriteTime | out-gridview

答案 9 :(得分:1)

cat C:\Temp\test.txt

cat是Get-Content的别名 - 对于较大的文件,您将获得 - 更多 - 在终端底部输出

您还可以添加-wait

cat C:\Temp\test.txt -wait 

-wait就像使用tail但它实际上是重新运行命令只是刷新输出

cat C:\Temp\test.txt | oh –Paging

哦= Out-Host

答案 10 :(得分:0)

建议:将文件放入临时/一次性.txt文件中,然后让操作系统调用您喜欢的编辑器,即链接到.txt扩展名的编辑器。

Get-Process | Out-File temp.txt; \ TEMP.TXT

注意:每次使用它时,您都将覆盖任何预先存在的temp.txt文件。 明智地选择文件名。

以上只是一个基本想法 下一步是将其转换为" |更"使用别名或配置文件功能等

HTH, Marcelo Finkielsztein

答案 11 :(得分:0)

我恰好有这个问题(我想少一点,不要多一点),发现@ richard-berg的答案对我有用,对PowerShell(不是Linux)是新手,我发现该答案中缺少的东西(对我来说)是: 我首先要去:

<body ng-app="myApp" > <div ng-controller="intlMassUpdateDistPctController">

然后提示“安装nuget软件包”。我这样做了,但随后不得不在Find-Package pscx | Install-Package上使用
-AllowClobber参数。

为了少用,我不得不:

Install-Package

都有效:-)