¿Cómo exporto nombres de archivos, rutas de archivos y propiedades de un árbol de directorios a CSV?

¿Cómo exporto nombres de archivos, rutas de archivos y propiedades de un árbol de directorios a CSV?

Tengo un disco duro lleno de copias de seguridad que necesito detallar en una hoja de cálculo de forma rápida y específica de la siguiente manera. Espero que haya una manera fácil de hacer lo que necesito mediante algún tipo de archivo .bat o .cmd, pero no sé por dónde empezar.

Todo lo que necesito son los dos primeros niveles de carpeta en la jerarquía para ir a csv:

Estructura de carpetas

Y estos son los datos que necesito exportar desde el disco:

Datos para Excel

Intenté utilizar el siguiente código en powershell:

cd\ c:<--- donde reside mi carpeta de prueba

entonces

cd\ test<--- contiene mis estructuras de carpetas de prueba para generar

entonces esto que yoencontróantes de publicar mi pregunta.

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

Y me doy cuenta de que de alguna manera necesito usar Select-Objectpara especificar más propiedades de carpeta para enviar al csv, pero parece que no puedo hacer que lo anterior funcione de la manera básica que debería.

En lugar de eso, recibo el siguiente error:

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

También intenté importar mi carpeta de prueba en Notepad++ y puedo verla como un espacio de trabajo que puedo explorar pero no puedo exportar a csv con la información que necesito. Las únicas opciones que puedo ver son las que ves en la captura de pantalla cuando hago clic derecho en los directorios y no hay opción para generar salida (no soy un experto en esto).

Bloc de notas++

La otra cosa que intenté fue crear un archivo test.cmd con lo siguiente dentro:

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

Después de ejecutar esto, parece que me acerca un poco más a lo que estoy buscando, pero todavía no veo la información que necesito como se especifica en mi original.captura de pantalla de excelen la parte superior de esta publicación:

salida.csv del archivo .cmd

Como puede ver, me falta la ruta de directorio adecuada y lo único que veo es que <DIR>tampoco puedo ver el segundo nivel en la estructura de carpetas que contiene las subcarpetas. El número y tamaño de archivos de cada carpeta y la clasificación en columnas tampoco son correctos.

¿Puede ayudarme alguien con conocimientos de creación de bases de datos basadas en comandos? Mi pregunta quedó en espera porque no era lo suficientemente detallada, pero ahora me he esforzado al máximo para explicar todo lo que he probado y con más de 2 petabytes de copias de seguridad de almacenamiento en hojas de cálculo desde nuestro almacenamiento Nearline necesito poder Haga esto de manera rápida y eficiente.

Muchas gracias de antemano.

Respuesta1

Estoy de acuerdo con Bill_Stuart en el acuerdo de WinDirStat... (aunque no he necesitado usarlo en años) Sin embargo, si usted dice que debe hacerlo, entonces tal vez algo como lo siguiente, por supuesto, cambie el cálculo a lo que elija lo del tamaño.

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

Respuesta2

Intente trabajar con lo siguiente en 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

ingrese la descripción de la imagen aquí

Calcular tamaños de directorio

Matriz temporal a CSV

información relacionada