I have scripted Free.bat to return the free space of a local or remote volume. Free.bat uses standard commands.

The syntax for using Free.bat is:

call Free LOCALorREMOTE_DRIVE FreeSpace \[Units\]


LOCALorREMOTE_DRIVE is the local or remote drive, like C: or D: or X: or \\ComputerName\C$.

FreeSpace is a call directed environment variable that will contain the number of free space Units.

Units is an optional parameter that contains KB, MB, or GB. The default is bytes.
NOTE: See the following bytes per unit:
KB (kilobyte) = 1,024 bytes
MB (megabyte) = 1,048,576 bytes
GB (gigabyte) = 1,073,741,824 bytes
TB (terabyte) = 1,099,511,627,776 bytes
PB (petabyte) = 1,125,899,906,842,624 bytes
EB (exabyte) = 1,152,921,504,606,846,976 bytes

When using units, FreeSpace is rounded to the nearest whole number.
NOTE: FreeSpace is NOT a arithmetic environment variable. If you know that the number does NOT exceed 32 bits of precision, you can make it arithmetic using:
if "%FreeSpace%" EQU "0" (
set /a FreeSpace=0
) ELSE (
set /a FreeSpace=%FreeSpace%
Free.bat contains:
@echo off
if \{%2\}

\{\} goto :ERR
for /f "tokens=1-3*" %%a in ('dir %1 /-c^|findstr /i /C:"bytes free"') do set FreeSpace=%%c
if \{%3\}

\{\} goto finish
if /i \{%3\}

\{KB\} set units=1024&goto divide
if /i \{%3\}

\{MB\} set units=1048576&goto divide
if /i \{%3\}==\{GB\} set units=1073741824&goto divide
@echo Syntax Free LOCALorREMOTE_DRIVE FreeSpace Units
goto :EOF
set work="%TEMP%\FreeSpace_%RANDOM%.VBS"
@echo Set objArgs = WScript.Arguments>%work%
@echo wscript.echo eval(objArgs(0))>>%work%
for /f "Tokens=*" %%a in ('cscript //nologo %work% %FreeSpace%/%units%') do (
set xx=%%a
for /f "Tokens=1* Delims=." %%x in ('@echo %xx%') do (
set FreeSpace=%%x
set Remain=%%y0
if "%Remain:~0,1%" LSS "5" goto end
for /f "Tokens=*" %%a in ('cscript //nologo %work% %FreeSpace%+1') do (
set xx=%%a
set FreeSpace=%xx%
del /q %work%
endlocal&set %2=%FreeSpace%