Wie exportiere ich Dateinamen, Dateipfade und Eigenschaften eines Verzeichnisbaums als CSV?

Wie exportiere ich Dateinamen, Dateipfade und Eigenschaften eines Verzeichnisbaums als CSV?

Ich habe eine Festplatte voller Backups, die ich schnell und auf die folgende spezifische Weise in einer Tabelle detailliert beschreiben muss. Ich hoffe, dass es eine einfache Möglichkeit gibt, das zu tun, was ich brauche, über eine Art .bat- oder .cmd-Datei, aber ich weiß nicht, wo ich anfangen soll.

Ich muss nur die ersten beiden Ordnerebenen in der Hierarchie in CSV umwandeln:

Ordnerstruktur

Und dies sind die Daten, die ich vom Laufwerk exportieren muss:

Daten für Excel

Ich habe versucht, den folgenden Code in Powershell zu verwenden:

cd\ c:<--- wo mein Testordner liegt

Dann

cd\ test<--- enthält meine Testordnerstrukturen zur Ausgabe

dann das, was ichgefundenbevor ich meine Frage poste.

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

Select-ObjectUnd mir ist klar, dass ich irgendwie weitere Ordnereigenschaften angeben muss, um sie in die CSV-Datei auszugeben, aber ich kriege es nicht hin, dass das oben Genannte so funktioniert, wie es sollte.

Stattdessen erhalte ich die folgende Fehlermeldung:

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

Ich habe auch versucht, meinen Testordner in Notepad++ zu importieren, und ich kann ihn als Arbeitsbereich sehen, den ich durchsuchen kann, aber ich kann ihn nicht mit den benötigten Informationen in CSV exportieren. Die einzigen Optionen, die ich dort sehen kann, sind die, die Sie im Screenshot sehen, wenn ich mit der rechten Maustaste auf die Verzeichnisse klicke, und es gibt keine Option zur Ausgabe (ich bin kein Experte darin).

Notizblock++

Außerdem habe ich versucht, eine Datei test.cmd mit folgendem Inhalt zu erstellen:

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

Nachdem ich dies ausgeführt habe, scheint es mich ein wenig näher an das zu bringen, was ich suche, aber ich sehe immer noch nicht die Informationen, die ich benötige, wie in meinem ursprünglichenExcel-Screenshotoben in diesem Beitrag:

output.csv aus .cmd-Datei

Wie man sieht, fehlt mir der richtige Verzeichnispfad und <DIR>ich sehe stattdessen nur die zweite Ebene in der Ordnerstruktur mit den Unterordnern. Auch die Dateianzahl und -größe der einzelnen Ordner sowie die Sortierung in Spalten stimmen nicht.

Kann mir jemand helfen, der sich mit der befehlsbasierten Datenbankerstellung auskennt? Meine Frage wurde zurückgestellt, da sie nicht detailliert genug war, aber ich habe mir jetzt die größte Mühe gegeben, alles zu erklären, was ich versucht habe, und mit über 2 Petabyte an Speichersicherungen in Tabellenkalkulationen von unserem Nearline-Speicher muss ich in der Lage sein, dies schnell und effizient zu tun.

Vielen Dank im Voraus.

Antwort1

Ich stimme mit Bill_Stuart überein, was die Sache mit WinDirStat angeht … (obwohl ich es seit Jahren nicht mehr brauchte). Wenn Sie jedoch sagen, dass Sie es müssen, dann vielleicht etwas wie das Folgende. Ändern Sie die Berechnung natürlich hinsichtlich der Größe nach Ihren Wünschen.

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
...

Antwort2

Versuchen Sie, mit dem Folgenden in Powershell zu arbeiten.

$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

Bildbeschreibung hier eingeben

Berechnen von Verzeichnisgrößen

Temporäres Array nach CSV

verwandte Informationen