Як виправити усічений вихід PowerShell, навіть коли я вказав -ширина 300


2

Я намагаюся отримати список усіх каталогів і файлів на зовнішньому жорсткому диску, з одним повнокваліфікованим шляхом до каталогу / файлу на рядок. Для цього я використовую PowerShell в Windows 10. Це команда PowerShell, яку я використовую:

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt" -width 300

Однак у моєму виході деякі шляхи обрізані. Насправді усічені понад 10 000 ліній. Ось приклад одного рядка у моєму вихідному файлі Power.thell PowerShell:

E:\Sort\Tech Stuff\2006-2007 CompanyLtd\fsie01-Engineering-Users-User1\Reference\LCID & Language Group by Language\Configuring and Using International Features of Windows Windows 2000 - List of Locale I...

Коли я переглядаю цей каталог у Провіднику файлів (E: \ Сортування \ Технологія \ 2006-2007 CompanyLtd \ fsie01-Engineering-Users-User1 \ Довідка \ LCID та Мовна група за мовою), файл там називається "Налаштування та використання Міжнародні особливості Windows Windows 2000 - Список ідентифікаторів локальної мови та мовних груп.url '. Шлях до цього файлу становить 228 символів, якщо я не зробив неправильний рахунок, що має бути в допустимих межах.

Що я роблю неправильно, що обрізає шляхи у моєму виході PowerShell?

Відповіді:


3

Виведення труби в командну команду Format-Table , наприклад наступним чином:

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Format-Table -AutoSize

або

(Get-ChildItem 'E:\' -Force -Recurse).FullName | Format-Table -AutoSize

Зауважте, що -Widthпараметр Out-Fileкомандлета вказує кількість символів у кожному рядку виводу. Будь-які додаткові символи усічені, а не загорнуті. Однак -Width 300у цьому випадку має бути достатньо.


Дякую - це, здається, дозволяє мені отримати потрібний результат. Однак досі немає пояснень, що було не так з моєю початковою командою, яка виглядає так, що вона повинна робити те, що я хочу. Будь-яка ідея? Не інтуїтивно зрозуміло, що шляхи будуть (мабуть, довільно) усічені на ~ 205 символів, якщо не використовується команда таблиці формату.
осулик

Для мене Format-Table -AutoSizeне допоміг і рядки були усічені в будь-якому випадку, в той час як -width 300зробили
Suncatcher

0

для мене це найкраще працює з трубопроводами export-csv

https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Export-Csv?view=powershell-3.0

просто:

GCI 'E:\' -Recurse | Select FullName | Export-CSV Files.csv

без подвійних лапок:

Add-Content -Path Files.txt -Value (GCI 'E:\' -Recurse).FullName

Це працює, але кожен рядок укладається у подвійні лапки. Тож вам доведеться зіткнутися з цим, якщо ви цього не хочете.
Чарльз Бердж

@CharlesBurge Я думаю, що це залежить від культури та білого простору. Але дивіться мою редакцію для вирішення.
Фалько Олександр

0

Коли повернені значення є рядками, ви можете передавати на рядок із шириною.

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Out-String -Width 300 | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt"

Коли значення знаходяться в колекції / масиві, вихід керується за допомогою $ FormatEnumerationLimit Встановлення його в -1 означає необмежену кількість.

Детальніше читайте тут Перегляд усіленого виходу PowerShell

Я знаю, що це стара публікація, але я знайшов її до того, як шукав відповідь. Тому думав, що поділюся своїми висновками.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.