windows - ver - mostrar mensaje en pantalla cmd
Comando de Windows para el tamaƱo del archivo solamente? (12)
¿Hay un comando de Windows que muestre el tamaño en bytes de un archivo específico como este?
>filesize test.jpg
65212
Sé que el comando dir genera esta información, pero también produce 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.
Como usa 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
En Powershell puedes hacer:
$imageObj = New-Object System.IO.FileInfo("C:/test.jpg")
$imageObj.Length
En un archivo por lotes, el siguiente funciona para archivos locales, pero falla para 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 código siguiente 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
Esto no es exactamente lo que preguntaba y solo se puede usar desde la línea de comandos (y puede ser inútil en un archivo por lotes), pero una manera rápida de verificar el tamaño del archivo es simplemente 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
Prueba forfiles :
forfiles /p C:/Temp /m file1.txt /c "cmd /c echo @fsize"
El comando forfiles
ejecuta el comando c
para cada archivo m
en el directorio p
.
La variable @fsize
se reemplaza con el tamaño de cada archivo.
Si el archivo C:/Temp/file1.txt
tiene 27 bytes, forfiles
ejecuta este comando:
cmd /c echo 27
Que imprime 27
en la pantalla.
Como efecto secundario, borra tu pantalla como si hubieras ejecutado el comando cls
.
Si está dentro de un script por lotes, puede usar trucos de variables de argumento para obtener el tamaño del 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 locas. También vea este artículo para más información.
Editar: esto solo funciona en Windows 2000 y posterior
Si no desea hacer esto en una secuencia de comandos por lotes, puede hacerlo desde la línea de comandos de esta manera:
for %I in (test.jpg) do @echo %~zI
Feo, pero funciona. También puede pasar 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, nombre de archivo de cada archivo .DOC.
Tomado desde aquí :
El siguiente comando busca carpetas con un tamaño superior a 100 MB en la unidad D:
diruse /s /m /q:100 /d d:
La opción / s hace que se busquen subdirectorios, la opción / m muestra el uso del disco en megabytes, la opción / q: 100 hace que las carpetas que son mayores a 100 MB se marquen, y la opción / d solo muestra las carpetas que exceden el umbral especificado por / q.
Use el comando diskuse para encontrar archivos de un cierto tamaño. El siguiente comando muestra archivos de más de 100 MB de tamaño en la unidad D:
diskuse D: /x:104857600 /v /s
La opción / x: 104857600 hace que se muestren archivos de más de 104,857,600 bytes y solo es válida si incluye la opción / v (verbosa). La opción / s significa que se buscan los subdirectorios de la ruta especificada (en este caso, el disco D: drive).
Usando 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
Use una función para deshacerse de alguna limitación en el operador ~ z, especialmente útil con for loop:
@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
crear filesize.cmd (y ponerlo en C: / Windows / System32):
@echo %~z1
en Powershell DEBERÍAS hacer esto:
(Get-ChildItem C: / TEMP / file1.txt) .Length
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 (.).