Powershell中的“more”或“less”命令的等价物?

有没有一种方法来分页输出通过pipe道到一些“更多”的命令,这是在Linux \ UNIX的shell?

那么…有更多或更less(…)与其他平台所期望的相同。 试试下面的例子:

dir -rec | more 

就在这里:

some-cmdlet | out-host -paging

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

这会导致powershell在将其输出到屏幕之前对整个命令进行评估,而对于输出分页

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

另一方面,使用out-host -paging将在屏幕上显示信息。

Powershell社区扩展具有一个名为“less”的方便函数,它使用less.exe的移植副本来实际处理分页,从而提供更完整的Unix样式function集。

您可以通过启动pipe理员shell并运行以下命令来安装它:

 Find-Package pscx | Install-Package -Force 

force升级旧版本)

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

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

它在ConEmu和Powershell窗口中工作,但不幸的是,它不能按照你所期望的方式在v2.0 ISE下工作。

more不用于限制输出,它用于对输出进行分页,并且使得在terminal中读取更容易,如果有的话。

你在说使用headtail吗? EggHeadCafe有一个例子:

 type my.txt | select-object -first 10 type my.txt | select-object -last 10 

模仿headtail

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

这个函数主要基于Aman Dhally的这个博客条目,并且在分页时按下Q添加exception处理。

 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 dir -r | more ,它会立即启动分页输出,因为PowerShell的pipe道(而不是等待more.com的完整输出)。

如果你安装了VIM,我完全享受dir -r | vim -R - dir -r | vim -R - 。 不幸的是,这与more (即没有stream)相同的问题。

我比“more”命令更喜欢“less”命令,因为你也可以后退(而不是仅仅向前)。 我觉得这个function非常有用。

msysgit中的“less”适用于我(对于我来说,path是C:\Program Files (x86)\Git\bin\less.exe )。 我在PowerShell版本的“less”错误。

例:

ls|less

为了节省input,我在PowerShellconfiguration文件中添加了“l”的别名。

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

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

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

注意:每次使用这个,你都会覆盖任何预先存在的temp.txt文件。 明智地select文件名称。

以上只是一个基本的想法。
下一步将使用别名或configuration文件函数将其转换为“| more”。

HTH,Marcelo Finkielsztein