如何修复截断的 PowerShell 输出,即使我已指定 -width 300

osu*_*lic 16 windows powershell path command-line

我正在尝试获取外部硬盘驱动器上所有目录和文件的列表,每行一个完全限定的目录/文件路径。我在 Windows 10 上使用 PowerShell 来实现这一点。这是我正在使用的 PowerShell 命令:

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt" -width 300
Run Code Online (Sandbox Code Playgroud)

但是,有些路径在我的输出中被截断了。事实上,超过 10,000 行被截断。这是我的 listing.txt 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...
Run Code Online (Sandbox Code Playgroud)

当我在文件资源管理器 (E:\Sort\Tech Stuff\2006-2007 CompanyLtd\fsie01-Engineering-Users-User1\Reference\LCID & Language Group by Language) 中浏览到此目录时,该文件名为“配置和使用Windows Windows 2000 的国际特性 - 区域设置 ID 和语言组列表.url'。如果我没有记错的话,这个文件的路径是 228 个字符长,应该在可接受的范围内。

我做错了什么,截断了我的 PowerShell 输出中的路径?

Jos*_*efZ 21

管道输出到Format-Table commandlet,例如如下:

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Format-Table -AutoSize
Run Code Online (Sandbox Code Playgroud)

或者

(Get-ChildItem 'E:\' -Force -Recurse).FullName | Format-Table -AutoSize
Run Code Online (Sandbox Code Playgroud)

请注意,cmdlet 的-Width参数Out-File指定每行输出中的字符数。任何附加字符都会被截断,而不是换行。但是,-Width 300在这种情况下应该足够了。

  • 对我来说 `Format-Table -AutoSize` 没有帮助,无论如何字符串都被截断了,而 `-width 300` 做了 (5认同)
  • 对于我的情况,我不得不使用“Format-Table -Wrap -Autosize”;即使使用了“Format-Table -Autosize”,多列输出中的列值仍然被截断 (2认同)
  • 我可以确认“-Autosize”本身在我的情况下也没有什么不同,“Format-Table -Wrap -Autosize”可能是更好的解决方案。 (2认同)

And*_*WBJ 8

首先,您需要通过对单个属性使用 ExpandProperty 来确保 Select-Object 不会被截断

Get-ChildItem 'E:\' -Force -Recurse | Select-Object -ExpandProperty FullName | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt"
Run Code Online (Sandbox Code Playgroud)

或者当有更多属性时通过管道格式化表。
如果控制台中没有足够的空间,即使使用参数自动调整大小和换行,格式表也会选择要显示的值。
因此,您需要使用宽度参数通过管道连接到 Out-String 以在控制台中查看所有内容,或将宽度添加到 Out-File 以在输出文件中查看所有内容。

Get-ChildItem 'E:\' -Force -Recurse | Select-Object * | Format-Table | Out-String -width 9999
Run Code Online (Sandbox Code Playgroud)

和 (

Get-ChildItem 'E:\' -Force -Recurse | Select-Object * | Format-Table | Out-File -width 9999 -Encoding utf8 "C:\Users\Me\Desktop\listing.txt"
Run Code Online (Sandbox Code Playgroud)

或者

Get-ChildItem 'E:\' -Force -Recurse | Select-Object * | Format-Table | Out-String -width 9999 | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt"
Run Code Online (Sandbox Code Playgroud)

)
当值位于集合/数组中时,输出由 $FormatEnumerationLimit 控制 将
其设置为 -1 表示无限制。

我知道这是一篇旧帖子,但我在寻找答案之前找到了它。
所以我想分享我的发现。


Fal*_*der 6

对我来说,它最适合管道 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
Run Code Online (Sandbox Code Playgroud)

不带双引号:

Add-Content -Path Files.txt -Value (GCI 'E:\' -Recurse).FullName
Run Code Online (Sandbox Code Playgroud)