Using REG.EXE, built into Windows XP, Windows Server 2003, and later, or installed on Windows 2000 from the Support / Tools on the operating system CD-ROM, and VarLen.bat, I have scripted GetMem.bat to set an environment variable equal to a computers' physical memory, in megabytes.

The syntax for using GetMem.bat is:

GetMem MB \[Computer\]


MB       is a call directed numeric environment variable that will contain the amount of memory, in megabytes.                              Computer is an optional parameter that contains a remote computer's NetBIOS name.
GetMem.bat contains:
@echo off                              if \{%1\}==\{\} @echo Syntax GetMem MB \[Computer\]&goto :EOF                              setlocal ENABLEDELAYEDEXPANSION                              set comp=%2                              if "%comp%" EQU "" set comp=%computerName%                              set comp=%comp:"=%                              set comp=\\%comp:\=%                              set Key="%comp%\HKLM\HARDWARE\RESOURCEMAP\System Resources\Physical Memory"                              :: Retrieve the binary string                              For /f "Tokens=2,3" %%m in ('REG QUERY %Key% /V .Translated^|find "REG_RESOURCE_LIST"') do (                               set val=%%n                              )                              :: determine the length of the binary string.                              call VarLen val Len                              :: determine the position of the last 8 bytes of the binary string.                              set /a pos=%len% - 8                              set rev=!val:~%pos%!                              :: Since the binary value stores the memory DWORD in reverse notation,                              :: set the proper hexadecimal representation.                              set hex=0x%rev:~6,1%%rev:~7,1%%rev:~4,1%%rev:~5,1%%rev:~2,1%%rev:~3,1%%rev:~0,1%%rev:~1,1%                              :: Multiply each hexadecimal 2 character number by the proper bit shift.                              set /a wk1=%hex:~0,4% * 16777216                              set /a wk2=0x%hex:~4,2% * 65536                              set /a wk3=0x%hex:~6,2% * 256                              set /a wk4=0x%hex:~8,2%                              :: Add each decimal value.                              set /a wrk=%wk1% + %wk2% + %wk3% + %wk4%                               :: Convert to megabytes.                              set /a mem=%wrk% / 1048576                              :: Attempt to account for incorrect memory detection by making the results a multiple of 32MB.                              set /a mem=%mem% + 31                              set /a mem=%mem% / 32                              set /a mem=%mem% * 32                              endlocal&set /a %1=%mem%