使用 powershell 字符限制问题列出所有具有大小的文件

List all files with size using powershell char limit issue

我有一个应用程序文件夹,其中有超过 10 个应用程序。我想列出所有文件(包括子文件夹)及其目录和大小信息,并将其保存在每个应用程序文件夹下。

这是脚本(在 C:\Users\xxxxxx\Desktop\apps)

$FolderList = Get-ChildItem -Directory
foreach ($folder in $FolderList)
{
    $thisPath = Get-Location
    Get-ChildItem -File -Filter * -Path $folder -Recurse |
    Sort-Object -Property Length -Descending|
    Select-Object -Property FullName, Length, @{l='Length (MB)';e={$_.Length/1MB}} | 
    Format-Table -AutoSize | 
    Out-File $thisPath\fileList_$folder.txt
}

输出:

全名 - 长度 - 长度 (MB)


C:\Users\xxxxxx\Desktop\apps\3\VSCodeUserSetup-x64-1.62.2.exe 79944464 76.2409820556641 C:\Users\xxxxxx\Desktop\apps\3\son.zip 18745870 17.8774547576904

它做了我想要的,但在一些路径太长的输出中它没有写出长度甚至完整路径。

全名


C:\Users\xxxxxx\Desktop\apps\3\xxxxxxxxxxx/xxxxxx/xxxxxxxxxxxxxx/xxxxxxxxxxx/VSCodeUserSetu...
C:\Users\xxxxxx\Desktop\apps\3\son.zip

当我搜索时,我看到有一个字符限制。我该如何解决这个问题?

-Path 参数被定义为一个字符串数组,但是你给它提供了一个 DirectoryInfo 对象。

你问题的第二部分是关于截断的,这是因为你对数据使用了 Format-Table -AutoSize

Format-* cmdlet 旨在 在控制台上显示 输出 window 仅宽度有限,所有较长的项目都被截断。
经验法则:当您以后需要处理数据时,切勿使用 Format-* cmdlet。

我建议将(对象)信息保存为结构化 CSV 文件,而不是将格式化的 table 保存到文本文件,这样可以在以后更轻松地处理数据,而且不会被截断。 (例如,您可以在 Excel 中打开它)

# just get an array of Full pathnames
$FolderList = (Get-ChildItem -Directory).Name #instead of Fullname
foreach ($folder in $FolderList) {
    # create the path for the output
    $fileOut = Join-Path -Path $folder -ChildPath ('filelist_{0}.csv' -f $folder)
    Get-ChildItem -File -Path $folder -Recurse |
    Sort-Object -Property Length -Descending |
    Select-Object -Property FullName, Length, @{l='Length (MB)';e={$_.Length/1MB}} | 
    Export-Csv -Path $fileOut -NoTypeInformation -UseCulture
}

我在 Export-Csv cmdlet 中添加了开关 -UseCulture 这样您之后就可以简单地 double-click csv 文件在您的 Excel