@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