Puede sumar tamaños recursivamente (el siguiente es un archivo por lotes):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Sin embargo, esto tiene varios problemas porque cmd
se limita a la aritmética de enteros con signo de 32 bits. Por lo tanto, obtendrá tamaños superiores a 2 GiB incorrectos 1 . Además, es probable que cuente los enlaces simbólicos y las uniones varias veces, por lo que es, en el mejor de los casos, un límite superior, no el tamaño real (sin embargo, tendrá ese problema con cualquier herramienta).
Una alternativa es PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
o más corto:
ls -r | measure -sum Length
Si lo quieres más bonito:
switch((ls -r|measure -sum Length).Sum) {
{$_ -gt 1GB} {
'{0:0.0} GiB' -f ($_/1GB)
break
}
{$_ -gt 1MB} {
'{0:0.0} MiB' -f ($_/1MB)
break
}
{$_ -gt 1KB} {
'{0:0.0} KiB' -f ($_/1KB)
break
}
default { "$_ bytes" }
}
Puede usar esto directamente desde cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Tengo una biblioteca bignum parcialmente terminada en archivos por lotes en algún lugar que al menos obtiene la suma de enteros de precisión arbitraria. Realmente debería lanzarlo, supongo :-)
du
da el tamaño del directorio, pero todo lo que hace es caminar por el árbol y resumir. Algo que se puede expresar de manera muy elegante en una tubería como aquí :-). Entonces, para PowerShell, generalmente busco cómo puede descomponer el objetivo de alto nivel en operaciones adecuadas de nivel inferior.folder\*
no me funciona el tamaño de la carpeta que puse en el lugar muestra 0 bytes, ¿hay alguna solución?Hay una herramienta de Windows incorporada para eso:
Esto imprimirá mucha información innecesaria, pero al final será el tamaño de la carpeta de esta manera:
Si necesita incluir carpetas ocultas, agregue
/a
.fuente
Sugiero descargar la utilidad DU del Sysinternals Suite provisto por Microsoft en este enlace http://technet.microsoft.com/en-us/sysinternals/bb896651
Mientras lo hace, eche un vistazo a las otras utilidades. Son un salvavidas para todos los Windows Professional
fuente
\\live.sysinternals.com
si todavía existe). Sin embargo, estoy totalmente de acuerdo en que todas las herramientas de sysinternals deben incluirse por defecto. Aunque para muchos usos, PowerShell es un reemplazo bastante digno.Un trazador de líneas:
Lo mismo pero solo Powershell:
Esto debería producir el siguiente resultado:
fuente
0.00 C:\Windows
¿Puedo optimizar esto para todas las carpetas? Intenté ejecutar como administradorft
(Format-Table
). Puedes probar en sufl
lugar (Format-List
)Si tiene instalado git en su computadora (cada vez más común) simplemente abra MINGW32 y escriba:
du folder
fuente
du -h -d 1 folder | sort -h
si desea un tamaño legible por humanos, un solo nivel de subdirectorios y ordenar por tamaño.Recomiendo usar la utilidad https://github.com/aleksaan/diskusage . Muy simple y útil. Y muy rapido.
Simplemente escriba un shell de comando
y obtener una lista de carpetas ordenadas por tamaño
Este ejemplo se ejecutó a 272 ms en HDD.
Puede aumentar la profundidad de las subcarpetas para analizar, por ejemplo:
y obtener tamaños no solo para las carpetas seleccionadas sino también para sus subcarpetas
* 3.5Tb en el servidor ha sido escaneado por 3m12s
fuente
Aquí viene un código de PowerShell que escribo para enumerar el tamaño y el recuento de archivos para todas las carpetas en el directorio actual. Siéntase libre de reutilizar o modificar según sus necesidades.
fuente
$FolderList = Get-ChildItem -Directory -Force; $data = foreach ($folder in $FolderList) { set-location $folder.FullName; $size = Get-ChildItem -Recurse -Force | Measure-Object -Sum Length; $size | select @{n="Path"; e={$folder.Fullname}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
Esto proporcionará objetos (más Powershell-ish), 'FileCount' y 'Size' son enteros (por lo que puede procesarlos más tarde, si es necesario), y 'Size' está en bytes, pero podría convertirlo fácilmente a GB (o la unidad que desee) con$Data.Size / 1GB
.$Data = dir -Directory -Force | %{ $CurrentPath = $_.FullName; Get-ChildItem $CurrentPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum Length | select @{n="Path"; e={$CurrentPath}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
Este código está probado. Puedes verificarlo de nuevo.
fuente
Supongo que esto solo funcionaría si el directorio es bastante estático y su contenido no cambia entre la ejecución de los dos comandos dir. Tal vez una forma de combinar esto en un comando para evitar eso, pero esto funcionó para mi propósito (no quería la lista completa; solo el resumen).
GetDirSummary.bat Script:
Uso:
GetDirSummary.bat c: \ temp
Salida:
fuente
Llegué
du.exe
con mi distribución git. Otro lugar podría ser Microsoft o Unxutils mencionados anteriormente .Una vez que tengas du.exe en tu camino. Aquí está tu
fileSizes.bat
:-)➪
fuente
Creo que su única opción será diruse (una solución de terceros altamente compatible):
Obtener el tamaño del archivo / directorio desde la línea de comando
La CLI de Windows es, por desgracia, bastante restrictiva, también puede instalar Cygwin, que es un sueño usar en comparación con cmd. Eso le daría acceso a la herramienta de Unix portada, que es la base de diruse en Windows.
Lo siento, no pude responder sus preguntas directamente con un comando que puede ejecutar en el cli nativo.
fuente
du
entonces Cygwin es una exageración. Solo ve con GnuWin32 .:: Obtenga una cantidad de líneas que los comandos Dir devuelven (/ -c para eliminar los separadores de números:.,) ["Tokens = 3" para mirar solo la tercera columna de cada línea en Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Número de la penúltima línea, donde es el número de bytes de la suma de archivos:
Finalmente obtenga el número de bytes en la penúltima línea - 3ra columna:
Como no utiliza la búsqueda por palabras, no tendría problemas de idioma.
Limitaciones:
fuente
Tratar:
Cambie C: \ Archivos de programa a la carpeta que desee y cambie% A a %% A si lo usa en un archivo por lotes
Devuelve el tamaño de toda la carpeta, incluidas las subcarpetas y los archivos ocultos y del sistema, y funciona con carpetas de más de 2 GB
Escribe en la pantalla, por lo que tendrás que usar un archivo provisional si no quieres eso.
fuente
La siguiente secuencia de comandos se puede utilizar para recuperar y acumular el tamaño de cada archivo en una carpeta determinada.
La ruta de la carpeta
%folder%
se puede proporcionar como argumento para este script (%1
).En última instancia, los resultados se mantienen en el parámetro
%filesize%
Nota: El método
calcAccSize
también puede imprimir el contenido de la carpeta (comentado en el ejemplo anterior)fuente
Así que aquí hay una solución para sus dos solicitudes de la manera que solicitó originalmente. Le dará un tamaño de archivo de legibilidad humana sin los límites de tamaño de archivo que todos están experimentando. Compatible con Win Vista o más reciente. XP solo está disponible si Robocopy está instalado. Simplemente suelte una carpeta en este archivo por lotes o utilice el mejor método mencionado a continuación.
Para poder utilizar este archivo por lotes, colóquelo convenientemente en su carpeta SendTo. Esto le permitirá hacer clic derecho en una carpeta o selección de carpetas, hacer clic en la opción Enviar a y luego seleccionar este archivo por lotes.
Para encontrar la carpeta SendTo en su computadora, la forma más simple es abrir cmd y luego copiar en esta línea tal como está.
fuente
Resolví un problema similar. Algunos de los métodos en esta página son lentos y otros son problemáticos en un entorno multilenguaje (todos suponen inglés). Encontré una solución simple usando vbscript en cmd. Se prueba en W2012R2 y W7.
Establece la variable de entorno S_. Por supuesto, puede cambiar la última línea para mostrar directamente el resultado, por ejemplo
Puede usarlo como subrutina o como cmd independiente. El parámetro es el nombre de la carpeta probada cerrada entre comillas.
fuente
El método más fácil para obtener solo el tamaño total es powershell, pero aún está limitado por el hecho de que los nombres de ruta de más de 260 caracteres no están incluidos en el total
fuente