У меня есть жесткий диск, полный резервных копий, которые мне нужно подробно описать в электронной таблице следующим образом. Я надеюсь, что есть простой способ сделать то, что мне нужно, с помощью какого-то файла .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 с информацией, которая мне нужна. Единственные параметры, которые я могу видеть, - это то, что вы видите на скриншоте, когда я щелкаю правой кнопкой мыши по каталогам, и никакой опции для вывода (я не эксперт в этом).

Notepad++

Еще я попробовал создать файл test.cmd со следующим:

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

После выполнения этого, мне кажется, это немного приближает меня к тому, что я ищу, но я до сих пор не вижу нужную мне информацию, как указано в моем оригинальном скриншоте Excel в верхней части этого поста:

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

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

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

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

2 ответа2

0

Попробуйте поработать с нижеприведенным в 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

0

Я согласен с 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
...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .