如何将目录树的文件名、文件路径和属性导出为 CSV?

如何将目录树的文件名、文件路径和属性导出为 CSV?

我的硬盘里装满了备份,我需要快速地在电子表格中详细记录这些备份,具体方法如下。我希望有一种简单的方法可以通过某种 .bat 或 .cmd 文件来完成我需要的操作,但我不知道从哪里开始。

我所需要的只是层次结构中的前两个文件夹级别以转到 csv:

文件夹结构

这是我需要从驱动器导出的数据:

Excel 数据

我尝试在 powershell 中使用以下代码:

cd\ c:<--- 我的测试文件夹位于此处

然后

cd\ test<---包含我要输出的测试文件夹结构

那么这是我成立在发布我的问题之前。

Get-ChildItem -Recurse -Directory -Depth 3 |
    Select-Object FullName |
    Export-Csv Test.csv -NoTypeInformation

我意识到我需要以某种方式Select-Object指定更多文件夹属性来输出到 csv,但我似乎无法让上述内容以基本方式工作。

相反,我得到了以下错误:

Get-ChildItem : A parameter cannot be found that matches parameter name 'Directory'.
At line:1 char:34
+ Get-ChildItem -Recurse -Directory <<<<  -Depth 3 |
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

我也尝试将我的测试文件夹导入 Notepad++,我能够将其视为可以浏览的工作区,但无法将我需要的信息导出到 csv。我在那里能看到的唯一选项就是当我右键单击目录时在屏幕截图中看到的内容,没有输出选项(我不是这方面的专家)。

记事本++

我尝试的另一件事是创建一个 test.cmd 文件,其中包含以下内容:

C:\TEST\
dir >> C:\TEST\test.csv

运行此程序后,它似乎让我更接近了我想要的内容,但我仍然没有看到原始文件中指定的所需信息excel 截图在这篇文章的顶部:

来自 .cmd 文件的输出.csv

正如您所见,我缺少正确的目录路径,而我所看到的却是<DIR>,我也看不到包含子文件夹的文件夹结构中的第二级。每个文件夹的文件数量和大小以及列排序也不正确。

有谁知道基于命令的数据库创建知识可以帮助我吗?我的问题被搁置了,因为它不够详细,但现在我已尽最大努力解释我尝试过的一切,并且从我们的近线存储中将超过 2 PB 的存储备份到电子表格,我需要能够快速高效地完成此操作。

提前谢谢了。

答案1

我同意 Bill_Stuart 关于 WinDirStat 交易的观点...(尽管多年来我都不需要使用它了)但是,如果你说你必须这样做,那么也许像下面这样,当然将计算结果更改为你为尺寸选择的任何内容。

Clear-Host
Get-ChildItem -Path 'd:\temp' -Recurse -Directory -Depth 3 | 
Select-Object Name,FullName,
@{Name='FolderCount';Expression = {(Get-ChildItem -Path $_.FullName -Directory -Recurse | Measure-Object).Count}},
@{Name='FileCount';Expression = {(Get-ChildItem -Path $_.FullName -File -Recurse| Measure-Object).Count}},
@{Name='SizeMB';Expression = {(Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB}} `
| Format-Table -AutoSize

# Results


Name           FullName                               FolderCount FileCount               SizeMB
----           --------                               ----------- ---------               ------
abcpath0       D:\temp\abcpath0                                 2         5    0.005889892578125
abcpath1       D:\temp\abcpath1                                 2         5    0.005889892578125
abcpath2       D:\temp\abcpath2                                 2         5    0.005889892578125
Duplicates     D:\temp\Duplicates                              24     12677     88.9826745986938
EmptyFolder    D:\temp\EmptyFolder                              0         0                    0
NewFiles       D:\temp\NewFiles                                 0         4 0.000568389892578125
...

答案2

尝试在 Powershell 中使用以下内容。

$dir = "C:\"

$results = @()

gci $dir -Recurse -Depth 1 | % { 

    $temp = [ordered]@{
        NAME            = $_
        SIZE            = "{0:N2} MB" -f ((gci $_.Fullname -Recurse | measure -Property Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB)
        FILE_COUNT      = (gci -File $_.FullName -Recurse | measure | select -ExpandProperty Count)
        FOLDER_COUNT    = (gci -Directory $_.FullName -Recurse | measure | select -ExpandProperty Count)
        DIRECTORY_PATH  = $_.Fullname
    }

    $results += New-Object PSObject -Property $temp

}

$results | export-csv -Path "C:\output.csv" -NoTypeInformation

在此处输入图片描述

计算目录大小

临时数组转为 CSV

相关内容