2009-07-03 2 views

ответ

36

Ну ... Существует «больше», что является более или менее (...) тем же, что вы ожидаете от других платформ. Попробуйте следующий пример:

dir -rec | more 
+1

делает именно это, когда вы посмотрите на определение функции с gcm more | select Определение | fl – Joey

+2

На самом деле, соединение с трубопроводом больше, чем трубопроводы на «out-host -paging», который отделен от реализации more.com. Однако на практике различий нет. –

+0

Ни в PS1 на Vista, ни PS2 на Win7, по крайней мере для меня.«more» - это функция, которая делает небольшую работу заранее, а затем просто вызывает more.com. Out-Host -Paging отдельно от этого (и не зависит от more.com). Разница наиболее заметна, когда вы используете то, что не возвращается сразу, например, пример gci -rec. Трубопровод к Out-Host является немедленным, так как он может обрабатывать входные данные одной строкой за один раз, а переход на большее время занимает время, поскольку PS сначала собирает все строки, а затем отправляет их на more.com. – Joey

2

more не используется для предела вывода, он используется для постраничной производства и сделать его более удобным для чтения в терминале, если что-нибудь.

Вы говорите об использовании head и tail? EggHeadCafe есть пример:

type my.txt | select-object -first 10 

type my.txt | select-object -last 10 

эмулировать head и tail.

+0

спасибо, исправил вопрос – Valentin

+0

Piping крайне медленно для больших файлов. Есть лучшие способы (встроенные опции), чтобы теперь делать 'head' и' tail' в powershell: http://stackoverflow.com/a/41626586/1081043 – wisbucky

14

Powershell Community Extensions имеет удобную функцию с именем «меньше», что обеспечивает более полный набор функций Unix-стиль, используя портированую копию less.exe на самом деле обрабатывать подкачки.

Вы можете установить его, начав администратора оболочки и работает:

Find-Package pscx | Install-Package -Force 

(force является обновление старых версий)

Вы можете строки трубы к нему, или дать имена файлов, как прямой параметры.

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

Он работает в ConEmu и Powershell окна, но, к сожалению, она не работает так, как вы ожидали бы под v2.0 ISE.

+0

Спасибо! Меньше - это намного больше! – jpaugh

70

Да есть:

some-cmdlet | out-host -paging

+0

Я использовал все более и менее раньше, ни будь таким же удобным для пользователя, каким я должен думать. Я нашел этот вариант более полезным/полезным, чем другие. Огромное спасибо. – TheXenocide

+0

Для печати содержимого очень большого файла это сработало очень хорошо для меня, так как командлет Get-Content начал немедленно, чтобы передать содержимое командлету out-host. –

+11

Обратите внимание, что параметр -Page Out-Host не поддерживается в PowerShell ISE. –

23

dir -rec | more плохой совет.

Это заставит PowerShell оценить всю команду до начала вывода на экран, что-то, что не нужно что-то вроде выхода Разбиение

В некоторых крайних случаях, это может привести к сбою системы (например, dir 'C:\' | more)

С другой стороны, использование out-host -paging будет выводить информацию на экран, поскольку он доступен.

+1

Когда вы используете удаленный PowerShell и хотите передать команду на удаленном сервере Windows через пейджер, прокладка через 'out-host -paging' работает по своему желанию. Трубопровод через 'more' при запуске удаленной команды бесполезен: весь текст отображается сразу. – IllvilJa

+3

Псевдоним для 'out-host -paging' -' oh -pa'. – Josh

+1

Это комментарий, а не ответ –

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).

0

Если у вас установлен VIM, я полностью наслаждаюсь dir -r | vim -R -. К сожалению, такая же проблема возникает с more (то есть без потоковой передачи).

0

Мне нравится команда «меньше» лучше, чем команда «больше», потому что вы можете пойти также назад (вместо просто вперед). Я считаю эту функцию очень полезной.

«меньше» от msysgit работает для меня (для меня путь C:\Program Files (x86)\Git\bin\less.exe). У меня были ошибки в powershell с версией GOW «меньше».

Пример:

ls|less

Чтобы сохранить печатая я добавил псевдоним "л" меньше в моем Powershell профиля:

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

0

Предложение: Поместите файл во временный/одноразовый .txt-файл, затем позвольте ОС вызывать ваш любимый редактор, тот, который связан с расширением .txt.

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

Примечание: каждый раз, когда вы используете это, вы перезаписываете любой существующий файл temp.txt. Выберите имя файла с умом.

Выше была только основная идея.
Следующий шаг будет преобразование это в "| более", используя псевдонимы или функции профиля и т.д.

НТН, Марсело Finkielsztein

0
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 
1
cat C:\Temp\test.txt 

кошка является псевдонимом для Get-Content - с большие файлы вы получите - больше - выход в нижней части терминала

вы можете также вы можете добавить -wait

cat C:\Temp\test.txt -wait 

-wait, как с помощью хвоста, но это на самом деле перезапустив команды просто освежает выходного

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

о = Out-Host

Смежные вопросы