RomanKotel
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте! Принесли комп починить, но кто-то выдернул из него RAM. Есть задача узнать размер установленной оперативной памяти из реестра host-системы Windows (когда она еще работала!) при загрузке с LiveCD. По вопросу нашел только батник GetMem.bat How can I retrieve the amount of memory in a computer from the registry? Код: @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" set Key="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% | который думаю прикрутить через RunScanner PEbuilder плагин, позволяющий редактировать реестр host-системы. Не могу понять куда батник выводит значение в МБ, даже на живой системе. VarLen.bat лежит здесь Код: @echo off if \{%2\}==\{\} @echo Syntax: call VarLen VarName Length&goto :EOF if not defined %1 @echo Syntax: call VarLen VarName Length, VarName not defined.&goto :EOF set /a %2 = 0 call echo.%%%1%%>%TEMP%\$VarLen$.tmp for %%n in (%TEMP%\$VarLen$.tmp) do set/a %2 = %%~zn - 2 del /q %TEMP%\$VarLen$.tmp |
| Всего записей: 35 | Зарегистр. 19-06-2008 | Отправлено: 00:33 23-12-2016 | Исправлено: RomanKotel, 00:40 23-12-2016 |
|