sendcard/scripts/get_device_info.bat
2026-04-14 09:47:00 +08:00

102 lines
2.8 KiB
Batchfile

@echo off
REM ASCII-only so cmd parses correctly on any system code page. Chinese labels: see README.
setlocal EnableDelayedExpansion
chcp 65001 >nul 2>&1
title device_code helper
set "CPU="
set "BOARD="
set "BIOSSN="
set "MGUID="
set "MGFLAT="
where wmic >nul 2>&1
if errorlevel 1 goto NO_WMIC
for /f "tokens=1* delims==" %%a in ('wmic cpu get ProcessorId /value 2^>nul ^| findstr /i /c:"ProcessorId="') do set "CPU=%%b"
for /f "tokens=* delims= " %%z in ("!CPU!") do set "CPU=%%z"
for /f "tokens=1* delims==" %%a in ('wmic baseboard get SerialNumber /value 2^>nul ^| findstr /i /c:"SerialNumber="') do set "BOARD=%%b"
for /f "tokens=* delims= " %%z in ("!BOARD!") do set "BOARD=%%z"
for /f "tokens=1* delims==" %%a in ('wmic bios get SerialNumber /value 2^>nul ^| findstr /i /c:"SerialNumber="') do set "BIOSSN=%%b"
for /f "tokens=* delims= " %%z in ("!BIOSSN!") do set "BIOSSN=%%z"
goto READ_REG
:NO_WMIC
echo [Note] wmic not found. CPU and board lines may be empty; registry GUID is still read.
echo.
:READ_REG
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid 2^>nul ^| findstr /i "MachineGuid"') do set "MGUID=%%a"
for /f "tokens=* delims= " %%z in ("!MGUID!") do set "MGUID=%%z"
if not defined MGUID goto SHOW
set "MGFLAT=!MGUID:{=!"
set "MGFLAT=!MGFLAT:}=!"
set "MGFLAT=!MGFLAT:-=!"
:SHOW
cls
echo ============================================================
echo Device info - three segments for device_code - see README
echo [1] ProcessorId [2] BaseBoard serial [3] MachineGuid flat
echo ============================================================
echo.
echo [1] CPU ProcessorId - Win32_Processor
if defined CPU goto OUT_CPU
echo [not read]
goto OUT_CPU_X
:OUT_CPU
echo !CPU!
:OUT_CPU_X
echo.
echo [2] BaseBoard SerialNumber - Win32_BaseBoard
if defined BOARD goto OUT_BR
echo [not read]
goto OUT_BR_X
:OUT_BR
echo !BOARD!
:OUT_BR_X
echo.
echo [2-alt] BIOS SerialNumber - Win32_BIOS optional
if defined BIOSSN goto OUT_BS
echo [not read]
goto OUT_BS_X
:OUT_BS
echo !BIOSSN!
:OUT_BS_X
echo.
echo [3] MachineGuid - HKLM\SOFTWARE\Microsoft\Cryptography
if defined MGUID goto OUT_MG
echo [not read]
goto OUT_MG_X
:OUT_MG
echo !MGUID!
echo Flat no braces hyphens - often segment 3:
echo !MGFLAT!
:OUT_MG_X
echo.
echo ------------------------------------------------------------
echo Suggested device_code: ProcessorId-BaseBoard-MachineGuidFlat
echo ------------------------------------------------------------
if not defined CPU goto JOIN_BAD
if not defined BOARD goto JOIN_BAD
if not defined MGFLAT goto JOIN_BAD
echo !CPU!-!BOARD!-!MGFLAT!
goto JOIN_OK
:JOIN_BAD
echo [incomplete] Copy values above and join with ASCII hyphen.
:JOIN_OK
echo.
echo Note: Final device_code depends on your upstream collector.
echo.
pause
endlocal