有没有办法通过将输出路由到一些'more'命令来对输出进行分页,这个命令可以在linux \ unix shell中找到?
答案 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 输出,并使其更容易在终端中读取,如果有的话。
您是在谈论使用head
和tail
吗? EggHeadCafe有一个例子:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
模仿head
和tail
。
答案 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
都有效:-)