Hola, pues tengo echo en batch un limpiador personalizado de mi sistema, al que le quiero meter un código para encontrar y eliminar archivos de cero bytes.
El problema es que toda la informacion que he encontrado al respecto, scripts y ejemplos de otra gente, en todos siempre usan esto:
%~z1 - display the file size of %1
Lo he probado a usar con un for, como en el ejemplo de los demás: %%~za
Pero me niego a usarlo de esa manera, porque no me funciona correctamente, con la mayoria de carpetas me devuelve un valor de 0 bytes (Cuando realmente no están vacías), y luego con las que no están vacías siempre me manda el valor 4096, ni más ni menos, ¿Como se explica esto? :/
Me parece peligroso usarlo para limpiar todo el disco duro porque no funciona bien, Entonces estoy buscando alguna otra alternativa, en batch o vbs para meterlo en el batch, ya que el programa sizeof tampoco me sirve.
Aunque bueno, con las carpetas no es mi prioridad, supongo que con un dir | findstr "bytes" puedo hacerlo de momento sin que haya errores, pero ¿como puedo buscar archivos de cero bytes?
¿Alguien sabe algo?
Muchas gracias...
Aqui la prueba de que no funciona, o quizas lo estoy haciendo mal:
@echo off
for /f "tokens=*" %%a in ('dir /B /s "c:\program files (x86)"') do (
echo %%~za "%%a"
pause >nul
)
(http://imageshack.us/m/9/5159/prtscrcapturegn.jpg)
EDITO:
Bueno, parece que al final he conseguido buenos resultados y funciona, pero con las carpetas no, así que he tenido que excluirlas del "dir":
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /B /s /A-D "%systemdrive%\*"') do (
set archivo=%%a
set size=%%~za
call :log
)
:log
If !size! EQU 0 (
echo !archivo! >> log.txt
echo !size! >> log.txt
echo+ >> log.txt
del /Q /F "!archivo!"
goto:eof
) ELSE (
goto:eof)