Guardar valores de archivo por lotes

Escribí este script para buscar volumen con suficiente espacio libre:

@echo on
setlocal
set gbsize=1,073,741,824
Set gbsize=%gbsize:,=%

for %%A in (A B C D) do ( 
for /f "tokens=3,4,5,*" %%B in ('dir %%A:\') do (
set bytesfree=%%B
set bytesfree=%bytesfree:,=%
if %%D == free If %bytesfree% gtr %gbsize% echo hi
)
)

Mi problema es que la variable libre de bytes no guarda su valor. la salida es (el eco está activado)

C:\Users\Desktop>(
set bytesfree=**780,607,488**
 set bytesfree=**23167987712**
 if free == free If 23167987712 GTR 1073741824 echo hi
)
hi

arece que @bytesfree perdió su valor. Alguien puede ayudarme porfavor? y proporcionar alguna explicación? Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta