The Microsoft ® Windows NT ® Server 4.0 Resource Kit contains, among many others, REG.EXE.
In Windows 2000 REG.EXE is available on the Windows installation CD-ROM, but has to be installed manually (on the CD-ROM run "\SUPPORT\TOOLS\SETUP.EXE").
As of Windows XP, REG.EXE is a native command.
REG.EXE can read and write Windows NT's registry.
On this page I will show how to combine REG.EXE with NT's FOR /F
to read any entry from the registry and store it in an environment variable.
Let's take the Country setting as an example.
This setting can be found under HKEY_CURRENT_USER\Control Panel\International\sCountry
in the registry.
Using REG.EXE to read this entry, we would type:
REG QUERY "HKCU\Control Panel\International" /v sCountry
The resulting output looks like this:
REG_SZ sCountry United States
[Thanks to Abdullatif El Khatib for correcting a syntax error in the previous command line.]
By using FOR's /F switch, we can extract the third (and following) word(s), i.e. the Country setting:
@ECHO OFF :: delims is a TAB followed by a space FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sCountry') DO SET Country=%%B ECHO Country=%Country%
Executing this batch file displays the Country setting from the registry:
Country=United States
We could have used different tokens settings, but by using the asterisk we make sure that not only the third word is used but everything following it as well.
For example, at first glance the following code may seem to do the same ...
@ECHO OFF :: delims is a TAB followed by a space FOR /F "tokens=3 delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sCountry') DO SET Country=%%A ECHO Country=%Country%
... but executing it would only extract the first word of the country setting:
Country=United
The following batch files, all shown in more details in the Date/Time pages, also use REG.EXE to read the registry:
The Date/Time page also shows versions of SortDate and SortTime that use NT's native REGEDIT.EXE instead of REG.EXE.
This batch file will read the registry for the display resolution settings:
@ECHO OFF :: GetRes.bat, Version 1.00 for Windows NT 4 :: Get display resolution settings :: Written by Rob van der Woude VER | FIND "Windows NT" > NUL IF ERRORLEVEL 1 GOTO:EOF ECHO. SET LINES=0 FOR /F "TOKENS=2* DELIMS=." %%A IN ('REG QUERY "HKCC\System\CurrentControlSet\Services" /S') DO CALL :Display %%A GOTO:EOF :Display IF %LINES%==4 GOTO:EOF ECHO %* | FIND "BitsPerPel" IF NOT ERRORLEVEL 1 SET /A LINES = %LINES% + 1 ECHO %* | FIND "Resolution" IF NOT ERRORLEVEL 1 SET /A LINES = %LINES% + 1 ECHO %* | FIND "Refresh" IF NOT ERRORLEVEL 1 SET /A LINES = %LINES% + 1 GOTO:EOF
Its output will look like this for 1024x768 pixels at 64K colors and a vertical refresh rate of 75Hz:
BitsPerPel 16 XResolution 1024 YResolution 768 VRefresh 75
GetRes version (V.2) no longer needs REG.EXE, but uses REGEDIT instead.
GetRes version (V.3) has been adapted to work in Windows NT 4 and Windows 2000.
GetRes version 4 for XP uses XP's new version of REG.EXE and XP's "new" registry keys to retrieve the resolution:
@ECHO OFF :: GetRes.bat, Version 4.00 for Windows XP :: Get display resolution settings :: Written by Rob van der Woude :: http://www.robvanderwoude.com :: Search the registry tree for the required values SET Key=HKCC\System\CurrentControlSet\Control\VIDEO FOR /F "skip=5 tokens=*" %%A IN ('REG QUERY "%Key%"') DO ( FOR /F "skip=5 tokens=*" %%B IN ('REG QUERY "%%~A"') DO ( FOR %%C IN (BitsPerPel XResolution YResolution VRefresh) DO ( FOR /F "skip=4 tokens=*" %%D IN ('REG QUERY "%%~B" /v DefaultSettings.%%C') DO ( CALL :Display %%D ) ) ECHO. ) ) SET Key= SET Val= SET __Video. GOTO:EOF :Display :: Convert hexadecimal values to decimal SET /A Val = %3 :: Display the result AND store the "last" values in variables FOR /F "tokens=2 delims=." %%a IN ('ECHO.%1') DO ( ECHO.%%a %Val% SET __Video.%%a=%Val% ) GOTO:EOF
This batch file will read the registry to enumerate both the default printer and all network printers on LAN Manager based networks:
@ECHO OFF :: GetPrn.bat, Version 1.01 :: Displays network printers plus default :: printer for current user on current system. :: Written for multi-vendor networks using NetBIOS. :: Use GetPrn2.bat for "real" NT/2000 networks. :: Requires REG.EXE from the Microsoft Windows NT 4 Resource Kit :: :: Written by Rob van der Woude :: http://www.robvanderwoude.com SETLOCAL ECHO Default printer defined for %username%: FOR /F "tokens=3* delims=]," %%A IN ('REG QUERY HKCU\Printers\Connections ˆ| FIND /V "Listing" ˆ| find "["') DO ECHO. %%A ECHO Network printers defined on %computername%: :: Delims is a TAB followed by a space FOR /F "tokens=3* delims= " %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /S ˆ| FIND "Share Name"') DO ECHO. %%B ECHO. ENDLOCAL GOTO:EOF
The following batch file will do the same on "real" NT networks:
@ECHO OFF :: GetPrn2.bat, Version 1.00 :: Displays network printers plus default :: printer for current user on current system. :: Written for "real" NT/2000 networks. :: Requires REG.EXE from the Microsoft Windows NT 4 Resource Kit :: :: Written by Rob van der Woude :: http://www.robvanderwoude.com SETLOCAL ECHO. :: Delims is a comma, followed by a TAB and a space FOR /F "tokens=3* delims=, " %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"') DO ECHO Default Printer %%A ECHO. ECHO Printers defined on %computername%: FOR /F "skip=1 tokens=*" %%A IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers" ˆ| FIND "["') DO CALL :Enum "%%A" ENDLOCAL GOTO:EOF :Enum ECHO. SET Printer=%1 SET Printer=%Printer:"=% SET Printer=%Printer:[=% SET Printer=%Printer:]=% :: Delims is a TAB followed by a space FOR /F "tokens=2* delims= " %%a IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%\Name"') DO ECHO Name %%b FOR /F "tokens=2* delims= " %%a IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%\Description"') DO ECHO Description %%b FOR /F "tokens=3* delims= " %%a IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%\Printer Driver"') DO ECHO Printer Driver %%b FOR /F "tokens=2* delims= " %%a IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\%Printer%\Port"') DO ECHO Port %%b GOTO:EOF
These batch files will read the registry to get the version numbers of both the McAfee scanning engine and the virus definition file. Much of the "effort" in version 1 is because of the different formats of the strings returned. For example, 4.0.4078, 0.4078.0 and 0.0.4078 are all valid strings indicating version 4078 for the virus definition file.
@ECHO OFF SETLOCAL :: Delims is a TAB followed by a space FOR /F "tokens=3* delims= " %%A IN ('REG QUERY HKLM\SOFTWARE\McAfee\VirusScan\szVirDefVer ˆ| FIND "REG_SZ"') DO SET McDatVer=%%A FOR /F "tokens=3* delims= " %%A IN ('REG QUERY HKLM\SOFTWARE\McAfee\VirusScan\szEngineVer ˆ| FIND "REG_SZ"') DO SET McEngVer=%%A :: Remove dots from engine version IF DEFINED McEngVer SET McEngVer=%McEngVer:.=% :: Remove everything but the virus definition version from the string returned FOR %%A IN (%McDatVer:.= %) DO IF %%A GEQ 100 SET McDatVer=%%A ECHO McAfee scanning engine version : %McEngVer% ECHO McAfee virus definition version : %McDatVer% ENDLOCAL GOTO:EOF
Version 2 does not require REG.EXE but uses Windows' native REGEDIT instead:
@ECHO OFF ECHO. IF NOT [%1]==[] GOTO Syntax IF NOT "%OS%"=="Windows_NT" GOTO Syntax SETLOCAL START /WAIT REGEDIT.EXE /E "%Temp%.\%~n0.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates\TVD\Shared Components\VirusScan Engine\4.0.xx" IF NOT EXIST "%Temp%.\%~n0.reg" ( ECHO McAfee registry keys not found ECHO. GOTO Syntax ) FOR /F "tokens=2 delims==" %%A IN ('TYPE "%Temp%.\%~n0.reg" ˆ| FIND "szEngineVer"') DO SET McEngVer=%%~A FOR /F "tokens=2 delims==" %%A IN ('TYPE "%Temp%.\%~n0.reg" ˆ| FIND "szDatVersion"') DO SET McDatVer=%%~A FOR /F "tokens=2 delims==" %%A IN ('TYPE "%Temp%.\%~n0.reg" ˆ| FIND "szDatDate"') DO SET McDatDate=%%~A DEL "%Temp%.\%~n0.reg" ECHO McAfee scanning engine version : %McEngVer% ECHO McAfee virus definition version : %McDatVer% ECHO McAfee virus definition date : %McDatDate% ENDLOCAL GOTO End :Syntax ECHO McAfee.bat, Version 2.00 for Windows NT 4 / 2000 / XP ECHO Display McAfee VirusScan version information ECHO. ECHO Usage: MCAFEE [ /? ] ECHO. ECHO Written by Rob van der Woude ECHO http://www.robvanderwoude.com :End
Notes: | (1) | These batch files and its author are in no way associated with National Associates. |
(2) | These batch files are extremely version-specific. With each new version of the software, you will need to do some research and modify the batch files. |
McAfee.bat Version 1.00 | McAfee.bat Version 2.00 | ||
AVVer.kix (obsolete by now) |
SAVVer.kix (SAV Versions 9.3 and 10) |
||
Download the sources |
More information on adding and deleting registry entries using native commands only can be found here.
page last modified: 2016-09-19; loaded in 0.0023 seconds