PowerShell: ¿Cómo obtener el tamaño del archivo?
PowerShell es una poderosa herramienta de línea de comandos que le permite automatizar muchas tareas, incluido el trabajo con archivos y directorios. Al utilizar una combinación de cmdlets de PowerShell integrados y un poco de secuencias de comandos, puede obtener fácilmente el tamaño de archivo de cualquier archivo o de varios archivos en un directorio. Con la ayuda de esta guía, podrá recuperar el tamaño de los archivos de forma rápida y sencilla, sin tener que comprobar manualmente cada archivo.
Para obtener el tamaño de un archivo en PowerShell, puede usar el cmdlet Get-Item y pasarle la ruta del archivo cuyo tamaño desea obtener. El cmdlet devolverá un objeto que contiene varias propiedades del archivo, incluido su tamaño.
Por ejemplo, para obtener el tamaño de un archivo específico, utilice el siguiente script:
$File = Get-Item C:\path\to\file.txt
$size = $File.Length
Esto obtendrá el tamaño del archivo C:\path\to\file.txt y lo almacenará en la variable $size. El tamaño se devuelve en bytes. También puede utilizar el cmdlet Get-ChildItem para obtener el tamaño de un archivo. Por ejemplo:
$size = (Get-ChildItem C:\path\to\file.txt).Length
Para obtener el tamaño del archivo usando Get-ItemProperty, use el siguiente comando:
Get-ItemProperty -Path "C:\temp\Applog.zip" | Select-Object -ExpandProperty Length
También puede utilizar la clase FileInfo del marco .NET para obtener el tamaño de un archivo. Por ejemplo:
$File = [System.IO.FileInfo] "C:\Temp\AppLog.zip"
$Size = $file.Length
Esto obtendrá el tamaño del archivo C:\Temp\AppLog.zip y lo almacenará en la variable $size. El tamaño se devuelve en bytes.
Convertir el tamaño del archivo a KB, MB, GB y TB
¿Qué tal obtener el tamaño del archivo en KB, MB o GB? Claro, divide el tamaño del archivo por 1 MB para convertirlo a megabytes. Por ejemplo:
# File Location
$FilePath = "C:\Temp\AppLog.zip"
# Get file size in bytes
$FileSize = (Get-Item -Path $FilePath).Length
# To get file size in KB, MB, GB
Write-host "KB":($FileSize/1KB)
Write-host "MB":($FileSize/1MB)
Write-host "GB":($FileSize/1GB)
Write-host "GB":($FileSize/1TB)
Esto le dará el tamaño en kilobytes, megabytes, gigabytes y terabytes, respectivamente.
PowerShell para enumerar todos los archivos en un directorio y subdirectorios con tamaño
Puede usar el cmdlet Get-ChildItem para obtener una colección de archivos y usar el cmdlet ForEach-Object para recorrer la colección y recuperar el tamaño de cada archivo:
Get-ChildItem "C:\Temp" -Recurse -File | ForEach-Object {
# Do something with the file size
Write-Host "File: $($_.FullName), Size: $($_.Length)"
}
Esto le dará la lista de archivos y tamaños de archivos de forma recursiva de todas las subcarpetas en bytes.
Obtener informe de tamaño de archivo agrupado por tipo de archivo
Para obtener el tamaño de todos los archivos en una carpeta agrupados por sus tipos de archivo (extensiones), puede usar una combinación de cmdlets Get-ChildItem, Group-Object y Select-Object en PowerShell. He aquí un ejemplo:
Get-ChildItem -Path "C:\Temp" -File |
Group-Object -Property Extension |
Select-Object Name, @{n='TotalSize';e={($_.Group | Measure-Object -Property Length -Sum).Sum}} |
Sort-object -Descending -Property TotalSize |
Format-Table -AutoSize
Exportar tamaños de archivos a CSV
Para obtener el tamaño de todos los archivos en una carpeta y exportar la información del tamaño del archivo a un archivo CSV, puede usar el cmdlet Get-ChildItem para enumerar los archivos, el Select-Object cmdlet para seleccionar las propiedades que le interesan (nombre y longitud) y el cmdlet Export-Csv para escribir el resultado en un archivo CSV.
Get-ChildItem -Path "C:\Temp" -File |
Select-Object Name, FullName, Length |
Export-Csv -Path "C:\Temp\FileSizeRpt.csv" -NoTypeInformation
¿Cómo busco archivos grandes en PowerShell?
Puede usar el cmdlet Get-ChildItem para buscar archivos grandes en PowerShell. A continuación se muestra un ejemplo que busca todos los archivos de más de 100 MB en una carpeta específica y sus subcarpetas:
Get-ChildItem -Path "C:\Users\Thomas\Downloads" -Recurse -File | Where-Object { $_.Length -gt 100MB } | Select-Object Name, FullName, @{n="SizeMB";e={"{0:N2}" -f ($_.Length / 1MB)}}
Comprobar si el tamaño del archivo es mayor que 0 en PowerShell
En determinados escenarios, es posible que deba determinar si el tamaño de un archivo es mayor que cero. PowerShell proporciona una forma sencilla de lograr esto comparando el tamaño del archivo con 0 mediante declaraciones condicionales.
A continuación se muestra un ejemplo de cómo comprobar si el tamaño de un archivo es mayor que 0 en PowerShell:
$FilePath = "C:\Logs\AppLog.txt"
if ((Get-Item $FilePath).Length -gt 0) {
Write-Host "File Size is greater than 0"
} else {
Write-Host "File Size is 0"
}
En el fragmento de código anterior, recuperamos el tamaño del archivo usando el cmdlet Get-Item y lo comparamos con 0 usando el operador -gt (mayor que). Si el tamaño del archivo es mayor que 0, mostramos el mensaje "El tamaño del archivo es mayor que 0". De lo contrario, mostramos el mensaje "El tamaño del archivo es 0". Aquí hay otra versión de lo mismo:
$FilePath = "C:\Logs\AppLog.txt"
if (Test-Path $FilePath) { (Get-Item $FilePath).length -gt 0kb}
Devuelve VERDADERO si el tamaño es mayor que cero KB. En este script, el cmdlet Get-Item de PowerShell utiliza el parámetro Ruta para especificar la ruta del archivo y la propiedad Longitud para obtener el tamaño del archivo.
PowerShell para obtener el tamaño de la carpeta y el número de archivos
¿Qué tal encontrar el tamaño de una carpeta a partir de todos sus archivos de forma recursiva? Aquí está el script para obtener el tamaño total de todos los archivos en un directorio específico:
$Folder = "C:\Temp"
$Items = Get-ChildItem $folder -Recurse -File
$Size = ($Items | Measure-Object -Property Length -Sum).Sum
$count = ($items | Measure-Object).Count
Write-host "The Folder has '$Count' Files with size '$Size'"
#Output: The Folder has '24' Files with total size '3572135'
Aquí hay una secuencia de comandos alternativa para obtener el tamaño del directorio en MB:
$Foldersize = Get-ChildItem "C:\Temp" -recurse | Measure-Object -property length -sum
$Foldersize = [math]::Round(($FolderSize.sum / 1MB),2)
Write-Host "Size of Folder" $Foldersize
Podemos envolver el script en una función y hacerlo reutilizable:
Function Get-FolderSize {
param (
[Parameter(Mandatory=$true)]
[string] $Path
)
#Get all files from the path recursively into an object array
$items = Get-ChildItem -Path $Path -Recurse -File
$size = ($items | Measure-Object -Property Length -Sum).Sum / 1MB # size in MB
return $size
}
$FolderSize = Get-FolderSize -Path "C:\Temp"
Write-Host "Folder size: $FolderSize MB"
Este script utiliza la función Round() para redondear los decimales. Aquí hay otra publicación sobre ¿Cómo obtener el tamaño de una carpeta usando PowerShell?
Terminando
¡Ahora que sabemos lo fácil que es obtener tamaños de archivos usando PowerShell! Para obtener el tamaño del archivo en PowerShell, utilice el cmdlet Get-Item para recuperar el objeto del archivo y luego acceda a la propiedad Length de ese objeto. También puede usar el cmdlet Get-ChildItem para obtener una colección de archivos y usar el cmdlet ForEach-Object para recorrer la colección y recuperar el tamaño de cada archivo. El tamaño del archivo se devuelve en bytes, pero puedes convertirlo a un formato más legible, como kilobytes o megabytes, dividiendo el tamaño por 1 KB o 1 MB, respectivamente. Esto le permite recuperar rápidamente el tamaño de uno o varios archivos usando PowerShell.

