![如何将目录树的文件名、文件路径和属性导出为 CSV?](https://linux22.com/image/1575900/%E5%A6%82%E4%BD%95%E5%B0%86%E7%9B%AE%E5%BD%95%E6%A0%91%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E3%80%81%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E5%92%8C%E5%B1%9E%E6%80%A7%E5%AF%BC%E5%87%BA%E4%B8%BA%20CSV%EF%BC%9F.png)
我的硬盘里装满了备份,我需要快速地在电子表格中详细记录这些备份,具体方法如下。我希望有一种简单的方法可以通过某种 .bat 或 .cmd 文件来完成我需要的操作,但我不知道从哪里开始。
我所需要的只是层次结构中的前两个文件夹级别以转到 csv:
这是我需要从驱动器导出的数据:
我尝试在 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 截图在这篇文章的顶部:
正如您所见,我缺少正确的目录路径,而我所看到的却是<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