Кошмарный формат форматирования Powershell 2.0 - PullRequest
1 голос
/ 31 июля 2009

Как заставить Powershell выводить файл IDENTICAL в файл, созданный следующей командой?

dir / s / b / a-d *. *> C: \ files.txt

должно быть легко, верно? !!

EDIT: Я обнаружил, что ps обрезал вывод в зависимости от ширины экранного буфера. Исправьте это с помощью формата-таблицы и дополнения пробелами ... попробуйте формат-список, и вы получите заголовки свойств ... у вас есть идея.

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

Должен ли он быть точным? Зачем? Как говорится, если вы разбираете строки в Powershell, вы, вероятно, делаете что-то не так ... во всяком случае ...

1) Просто позвоните в cmd.exe.

PS> cmd /c "dir /s /b /a-d *.* > c:\files.txt"

2) Я полагаю, что вы можете получить те же результаты от родного Powershell. Но я не могу отвечать за тестирование каждого крайнего случая с NTFS-переходами, скрытыми файлами и т. Д.

PS> gci -r | ?{ !$_.psiscontainer } | %{ $_.fullname } | out-file c:\files.txt

Лично я ненавижу тот факт, что вы не можете использовать «select» для извлечения свойства FullName без странных побочных эффектов для нижестоящих командлетов. Если бессмысленность цикла foreach беспокоит вас так же сильно, как и меня, используйте Get-PropertyValue из PSCX или Linq-Select из Джош Эйнштейн .

1 голос
/ 07 августа 2009

Существует много способов записи информации в файл. Одним из них является Set-Content, который не имеет проблемы ширины. Кроме того, преобразование объекта FileInfo в строку приводит к полному имени.

dir * -r | ?{!$_.PSIsCcontainer} | Set-Content C:\files.txt

Причиной возникновения проблемы с Out-File является то, что все командлеты Out- * используют представления автоматического форматирования. Эти представления создаются с учетом требований консоли.

...