Read Registry value into a batch variable

Rue-Sainte-Catherine--2015-Before I forget, let me share with you a fantastic way to read values from Registry into a batch file variable.

Say you need to determine, what is the date format of this machine.  Normally you would read a value from HKEY_CURRENT_USER\Control Panel\International like this:

REG QUERY "HKCU\Control Panel\International" /v sShortDate

 

That command will produce an output similar to this:

HKEY_CURRENT_USER\Control Panel\International
sShortDate    REG_SZ    M/d/yyyy

But you do not need all that.  All you need is the string  “M/d/yyyy” (or “yyyy-MM-dd”).  To get just that string you need to skip to a second line and read third field on the last line.  How you can do that in a batch file?

Look at this batch command below.  It does just that:

FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query "HKCU\Control Panel\International" /v "sShortDate"') DO set "DFMT=%%B"
ECHO New variable DFMT = %DFMT%

This amazing command sets variable DFMT to a value stored in REG key sShortDate.  It skips two lines (skip=2).  It uses default delimiter space (no code is needed).  It ignores first two fields (tokens=2,*), and puts everything that remains into %B.

Note: Syntax tokens=2,3 would also work in this case because output doesn’t contain any spaces.  This would mean, skip first two fields and use third field as %B.  We use double percent sign (%%)  in %%B to indicate that this a variable and not an input parameter.

Fantastic!  Now variable DFMT contains string “M/d/yyyy”.  Based on this variable I can further direct my script to extract year from a proper position from an output of a DATE command.

Note:  you have to place this command in *.BAT or *.CMD file.  You cannot run this from a command prompt.

(Visited 21,719 times, 3 visits today)

4 Comments

  1. Udar Gromov , you are a Genius thank you.

    I needed to get the 3rd value of a Reg Query, the actual Data from the Value , and your code did the trick perfectly. I needed to get the ProfilePath for a specific SID which I obtained from a WMIC command.

    thanks so much for sharing your knowledge with the world

  2. Part of the maintenance we do at my work involves rebuilding user’s profiles and in windows 7 the registry key for the old profile needs to be deleted before the new profile will work correctly. Batch file to find files?

  3. Aaron, you can’t run this command from a command prompt.
    Place both lines of code into a CMD file and then run it.
    If you do that, you get a desired result.
    If you run this CMD file (“test.cmd”), you will get output similar to example below:

    C:\>c:\t\test

    C:\>FOR /F “skip=2 tokens=2,*” %A IN (‘reg.exe query “HKCU\Control Panel\Interna
    tional” /v “sShortDate”‘) DO set “DFMT=%B”

    C:\>set “DFMT=M/d/yyyy”

    C:\>ECHO New variable DFMT = M/d/yyyy
    New variable DFMT = M/d/yyyy

  4. Tried this with error:
    FOR /F “skip=2 tokens=2,*” %%A IN (‘reg.exe query “HKCU\Control Panel\International” /v “sShortDate”‘) DO set “DFMT=%%B”

    Error:
    %%A was unexpected at this time.

Your question, correction or clarification Ваш вопрос, поправка или уточнение