
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:
Und dies sind die Daten, die ich vom Laufwerk exportieren muss:
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-Object
Und 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).
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:
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