windows - total - get size of folder powershell
PowerShell Script para obtener un tamaƱo total de directorio (4)
Esta es una forma rápida de obtener el tamaño de extensiones de archivo específicas:
(gci d:/folder1 -r -force -include *.txt,*.csv | measure -sum -property Length).Sum
Necesito obtener el tamaño de un directorio, recursivamente. Tengo que hacer esto todos los meses, así que quiero hacer un script de PowerShell para hacerlo.
¿Cómo puedo hacerlo?
Gracias a quienes publicaron aquí. Adopté el conocimiento para crear esto:
# Loops through each directory recursively in the current directory and lists its size.
# Children nodes of parents are tabbed
function getSizeOfFolders($Parent, $TabIndex) {
$Folders = (Get-ChildItem $Parent); # Get the nodes in the current directory
ForEach($Folder in $Folders) # For each of the nodes found above
{
# If the node is a directory
if ($folder.getType().name -eq "DirectoryInfo")
{
# Gets the size of the folder
$FolderSize = Get-ChildItem "$Parent/$Folder" -Recurse | Measure-Object -property length -sum -ErrorAction SilentlyContinue;
# The amount of tabbing at the start of a string
$Tab = " " * $TabIndex;
# String to write to stdout
$Tab + " " + $Folder.Name + " " + ("{0:N2}" -f ($FolderSize.Sum / 1mb));
# Check that this node doesn''t have children (Call this function recursively)
getSizeOfFolders $Folder.FullName ($TabIndex + 1);
}
}
}
# First call of the function (starts in the current directory)
getSizeOfFolders "." 0
Intenta lo siguiente
function Get-DirectorySize() {
param ([string]$root = $(resolve-path .))
gci -re $root |
?{ -not $_.PSIsContainer } |
measure-object -sum -property Length
}
En realidad, esto produce un poco de un objeto de resumen que incluirá el recuento de elementos. Sin embargo, solo puedes tomar la propiedad Suma y esa será la suma de las longitudes
$sum = (Get-DirectorySize "Some/File/Path").Sum
EDITAR ¿Por qué funciona esto?
Vamos a desglosarlo por componentes de la tubería. El comando gci -re $root
obtendrá todos los elementos del directorio inicial de $root
recursiva y luego los insertará en la canalización. Entonces, cada archivo y directorio bajo la $root
pasará por la segunda expresión ?{ -not $_.PSIsContainer }
. Se puede acceder a cada archivo / directorio cuando se pasa a esta expresión a través de la variable $_
. El precedente ? indica que esta es una expresión de filtro que significa mantener solo los valores en la tubería que cumplen con esta condición. El método PSIsContainer devolverá verdadero para los directorios. Entonces, en efecto, la expresión de filtro solo mantiene los valores de los archivos. El objeto de medida de cmdlet final sumará el valor de la propiedad Longitud en todos los valores restantes en la canalización. Por lo tanto, es esencialmente llamar a Fileinfo.Length para todos los archivos en el directorio actual (recursivamente) y sumar los valores.
Si está interesado en incluir el tamaño de los archivos ocultos y del sistema, debe usar el parámetro -force con Get-ChildItem.