I need to add to a script that gets the windows version, Ex. 21H2
.
I can get the OS name and build, but really need the 21H2
.
What I have is:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
And I get:
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.19044 N/A Build 19044
Does anyone know how to get the 21H2
, without using PowerShell
, (which is disallowed in my work environment).
CodePudding user response:
Regardless of my earlier comment, the simplest, and quickest way to retrieve the result requested in your specific question is:
@For /F "EOL=H Tokens=2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V DisplayVersion 2^>NUL') Do @Echo %%H
[EDIT /]
BTW, based upon my earlier comment, you can change DisplayVersion
to CurrentBuildNumber
, if 19044
will still satisfy your requirements. This could be useful because the number can be better used in comparisons with IF
and EQU
/GTR
/GEQ
/LSS
/LEQ
etc.
And if you want the OS, Edition, Version, and Build all in one command, you could probably expand that to something like this:
@For /F "EOL=H Tokens=1,2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /T REG_SZ 2^>NUL ^| %SystemRoot%\System32\findstr.exe /RIC:"^ *CurrentBuildN" /C:" *ProductN" /C:" *D" ^| %SystemRoot%\System32\sort.exe /R') Do @Set /P "=%%I " 0<NUL
Alternatively modify the output:
@For /F "EOL=H Tokens=1,2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /T REG_SZ 2^>NUL ^| %SystemRoot%\System32\findstr.exe /RIC:"^ *CurrentBuildN" /C:" *ProductN" /C:" *D"') Do @Echo %%G: %%I "
Or define three variables:
@For /F "EOL=H Tokens=1,2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /T REG_SZ 2^>NUL ^| %SystemRoot%\System32\findstr.exe /RIC:"^ *CurrentBuildN" /C:" *ProductN" /C:" *D"') Do @Set "%%G=%%I"