Как экспортировать имена файлов, пути к файлам и свойства дерева каталогов в 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в верхней части этого поста:

output.csv из файла .cmd

Как вы видите, у меня отсутствует правильный путь к каталогу, и все, что я вижу, это <DIR>то, что я также не вижу второй уровень в структуре папок, содержащий подпапки. Количество файлов и размер для каждой папки, а также сортировка по столбцам также неверны.

Может ли кто-нибудь со знанием создания баз данных на основе команд помочь мне? Мой вопрос был отложен, потому что он был недостаточно подробным, но теперь я приложил максимум усилий, чтобы объяснить все, что я пробовал, и с более чем 2 петабайтами резервных копий хранилища в электронных таблицах из нашего хранилища Nearline мне нужно иметь возможность сделать это быстро и эффективно.

Спасибо заранее.

решение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

Связанный контент