2009-01-27 16 views
37

¿Hay un comando de Windows que muestre el tamaño en bytes de un archivo específico como este?¿Comando de Windows para el tamaño del archivo solamente?

>filesize test.jpg 
65212 

Sé que el comando dir genera esta información, pero también proporciona otra información.

Podría escribir fácilmente un programa así, pero preferiría usar un comando nativo de Windows, si es posible, o solo lo que está disponible en una nueva instalación de Windows XP.

Respuesta

44

Si está dentro de un script por lotes, puede utilizar trucos variables de argumentos para obtener el tamaño de archivo:

filesize.bat:

@echo off 
echo %~z1 

Esto le da resultados como los que sugiere en su pregunta.

Tipo

help call 

en el símbolo del sistema para todas las opciones de manipulación de variables locos. También vea this article para más información.

Editar: Esto sólo funciona en Windows 2000 y versiones posteriores

+8

Nota, esto solo funcionará para un archivo.Si desea poder pasar una máscara para obtener los tamaños de varios archivos, cambie la segunda línea a algo como 'para %% I en (% 1) do @echo %% ~ znI'. –

+0

@Mike, pero ¿cuál es el comando para contar la cantidad de bytes de la salida estándar canalizada? (a diferencia del archivo guardado) – Pacerier

+0

@Pacerier, no estoy seguro de si es posible usar este método. Las variables% ~ z se refieren específicamente a un archivo pasado como argumento, por lo que buscarán sus valores del sistema de archivos, en lugar de una secuencia dinámica de bytes. –

1

En Powershell que puede hacer:

$imageObj = New-Object System.IO.FileInfo("C:\test.jpg")  
$imageObj.Length 
+1

Se trabajará, pero hace caso omiso de todas las capacidades incorporadas de PowerShell para tareas comunes –

+0

prefiere utilizar Get-ChildItem test.jpg | Longitud de selección de objeto en Powershell. – Joey

37

Si no quiere hacer esto en un archivo por lotes, puede hacerlo desde la línea de comandos de la siguiente manera:

for %I in (test.jpg) do @echo %~zI 

Feo, pero funciona. También se puede pasar en una máscara de archivo para obtener una lista de más de un archivo:

for %I in (*.doc) do @echo %~znI 

mostrará el tamaño, el nombre de archivo de cada archivo .DOC.

+0

Bien, me preguntaba cómo hacer que funcione desde la línea de comandos –

+0

de alguna forma para obtener el tamaño de archivo en KB? –

3

Dado que está utilizando XP, Windows PowerShell es una opción.

(Get-Item filespec).Length 

o como una función

function Get-FileLength { (Get-Item $args).Length } 
Get-FileLength filespec 
+0

ps: No creo que Powershell esté incluido en una nueva instalación de XP. A menos que esté obteniendo imágenes de un SP2 o posterior con Powershell ya allí. – Cheeso

9

Trate forfiles: comando

forfiles /p C:\Temp /m file1.txt /c "cmd /c echo @fsize" 

Los forfiles comando se ejecuta c para cada archivo en el directorio mp.

La variable @fsize se reemplaza con el tamaño de cada archivo.

Si el archivo C:\Temp\file1.txt es de 27 bytes, forfiles ejecuta este comando:

cmd /c echo 27 

que imprime 27 a la pantalla.

Como efecto secundario, borra la pantalla como si hubiera ejecutado el comando cls.

0

en Powershell que DEBERÍAN hacer esto:

(Get-ChildItem C: \ TEMP \ file1.txt) .length

11

utilizar una función para deshacerse en alguna limitación en el operador ~ z, especialmente útil con bucle for:

@echo off 
set size=0 
call :filesize "C:\backup\20120714-0035\error.log" 
echo file size is %size% 
goto :eof 

:: set filesize of 1st argument in %size% variable, and return 
:filesize 
    set size=%~z1 
    exit /b 0 
+0

¡Agradable, gracias! ¿Hay alguna forma de que% size% muestre el tamaño en Kilobytes en lugar de Bytes? – luisdev

+0

Puede usar el operador set/a: set/a size =% ~ z1/1024 –

1

Tomados from here:

El siguiente comando encuentra carpetas º al son mayores de 100 MB de tamaño en la unidad D::

diruse /s /m /q:100 /d d: 

opción/s causa subdirectorios que deba ser registrado el uso del disco opción muestra/m en megabytes, el/q: 100 opción hace que las carpetas que se deben marcar más de 100 MB, y la opción/d muestra solo carpetas que superan el umbral especificado por/q.

Utilice el comando diskuse para buscar archivos de un cierto tamaño. El siguiente comando muestra los archivos de más de 100 MB de tamaño en la unidad D::

diskuse D: /x:104857600 /v /s 

El/x: opción 104857600 causa que los archivos más de 104,857,600 bytes para ser mostradas y sólo es válido si se incluye la opción/v (detallado) La opción/s significa que se buscan los subdirectorios de la ruta especificada (en este caso, el disco D: drive).

con VBScript

' This code finds all files over a certain size. 
' ------ SCRIPT CONFIGURATION ------ 
strComputer = "**<ServerName>**" 
intSizeBytes = 1024 * 1024 * 500 ' = 500 MB 
' ------ END CONFIGURATION --------- 
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
set colFiles = objWMI.ExecQuery _ 
    ("Select * from CIM_DataFile where FileSize > '" & intSizeBytes & "'") 
for each objFile in colFiles 
    Wscript.Echo objFile.Name & " " & objFile.Filesize/1024/1024 & "MB" 
next 
2
C:\>FORFILES /C "cmd /c echo @fname @fsize" 


C:\>FORFILES /? 

FORFILES [/P pathname] [/M searchmask] [/S] 
     [/C command] [/D [+ | -] {MM/dd/yyyy | dd}] 

Description: 
    Selects a file (or set of files) and executes a 
    command on that file. This is helpful for batch jobs. 

Parameter List: 
    /P pathname  Indicates the path to start searching. 
         The default folder is the current working 
         directory (.). 
+0

Tenga en cuenta que este comando no proporciona el tamaño del directorio, incluso si no hay un comando listo disponible en Windows. Tienes que escribir un script recursivo para eso. –

2

Esto no es exactamente lo que pedían acerca y sólo se puede utilizar desde la línea de comandos (y puede ser inútil en un archivo por lotes), pero uno forma rápida de comprobar el tamaño del archivo es sólo para usar dir:

> dir Microsoft.WindowsAzure.Storage.xml 

resultados: en

Directory of C:\PathToTheFile 

08/10/2015 10:57 AM   2,905,897 Microsoft.WindowsAzure.Storage.xml 
       1 File(s)  2,905,897 bytes 
       0 Dir(s) 759,192,064,000 bytes free 
1

crear filesize.cmd (y poner a C: \ Windows \ System32):

@echo %~z1 
0

En un archivo por lotes, el siguiente funciona para archivos locales, pero falla de archivos en discos duros de red

for %%I in ("test.jpg") do @set filesize=%~z1 

Sin embargo, es un código inferior porque no funciona para los archivos guardados en una unidad de red (por ejemplo, \ Nas \ test.jpg, \ 192.168.2.40 \ test.jpg) El siguiente código funciona para archivos en cualquier ubicación, lo escribí yo mismo. Estoy seguro de que hay formas más eficientes de hacerlo utilizando vbs, powershell o lo que sea, pero no quería hacer nada de eso, ¡buen lote para mí!

set file=C:\Users\Admin\Documents\test.jpg 
set /a filesize= 
set fileExclPath=%file:*\=% 

:onemoretime 
set fileExclPath2=%fileExclPath:*\=% 
set fileExclPath=%fileExclPath2:*\=% 
if /i "%fileExclPath%" NEQ "%fileExclPath2%" goto:onemoretime 

dir /s /a-d "%workingdir%">"%temp%\temp.txt" 
findstr /C:"%fileExclPath%" "%temp%\temp.txt" >"%temp%\temp2.txt" 

set /p filesize= <"%temp%\temp2.txt" 

echo set filesize=%%filesize: %fileExclPath%%ext%=%% >"%temp%\temp.bat" 
call "%temp%\temp.bat" 

:RemoveTrailingSpace 
if /i "%filesize:~-1%" EQU " " set filesize=%filesize:~0,-1% 
if /i "%filesize:~-1%" EQU " " goto:RemoveTrailingSpace 

:onemoretime2 
set filesize2=%filesize:* =% 
set filesize=%filesize2:* =% 
if /i "%filesize%" NEQ "%filesize2%" goto:onemoretime2 

set filesize=%filesize:,=% 
echo %filesize% bytes 

SET /a filesizeMB=%filesize%/1024/1024 
echo %filesizeMB% MB 

SET /a filesizeGB=%filesize%/1024/1024/1024 
echo %filesizeGB% GB 
Cuestiones relacionadas