
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:
Y estos son los datos que necesito exportar desde el disco:
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-Object
para 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).
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:
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