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
在这种情况下应该足够了。
首先,您需要通过对单个属性使用 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 表示无限制。
我知道这是一篇旧帖子,但我在寻找答案之前找到了它。
所以我想分享我的发现。
对我来说,它最适合管道 export-csv
简单地:
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)