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