Rob van der Woude's Scripting Pages
BE CAREFUL: This machine has no brain, use your own



Warning: Before tweaking the registry, make sure you have a full backup of your system. If anything goes wrong, you may end up losing all your data and reinstalling Windows.
As Microsoft states it, editing the registry "... is not supported by Microsoft. Use this method at your own risk."


Read Microsoft's Knowledge Base article Q318149 to learn How to Maintain Current Registry Backups in Windows NT 4.0 and Windows 2000.


General Syntax:

Import (merge) a .REG file:   REGEDIT.EXE [ /L:system | /R:user ] [ /S ] importfile.REG
Export to a (.REG) file:   REGEDIT.EXE [ /L:system | /R:user ] /E exportfile.REG "registry_key"
Compress the registry (Windows 98 only):   REGEDIT.EXE [ /L:system | /R:user ] /C


importfile.REG   .REG file to be imported (or "merged")
exportfile.REG   File name the information should be written to
"registry_key"   Registry key to be exported, e.g. "HKEY_CLASSES_ROOT\*\shell"
/S   Silent, i.e. hide confirmation box when importing files
/E   Export registry file
/L:system   Specify the location of the system.dat to use
/R:user   Specify the location of the user.dat to use
/C   Compress [filename] (Windows 98 only)


REGEDIT is usually known as a GUI tool to search or edit the Windows registry.
I would not have mentioned it here, however, if it couldn't be used in unattended mode as well.

This page focuses on reading and editing the registry in unattended mode only.

Microsoft's NT 4 Workstation and Server Resource Kits come with REG.EXE, a utility that makes reading (or editing) NT's registry easier.
In Windows 2000, REG.EXE is available on the 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 a single key and value directly, without the need for a temporary file.
Learn more about using REG.EXE.


Adding and editing (importing) registry entries

Adding items to the registry requires a *.REG file:

REGEDIT [ /S ] addsome.REG

The /S switch is optional, it skips the message dialogs before and after the import of the *.REG file.

Since NT 4 .REG files are in readable ASCII, they may be created "on the fly" by our batch files.
This is demonstrated in the DefOpen example in the Examples section.


Removing registry entries

To remove an entire "tree" from the registry using REGEDIT and a .REG file, just add a minus sign before the tree name:



will remove the entire tree "DummyTree".

To remove an individual item from the registry, place the minus sign after the equal sign:



will remove the individual value "ValueToBeRemoved" from "DummyTree".
This is demonstrated in the UniqueID.bat example below, a batch file that forces a new LANDesk agent ID.

How to remove an individual registry key or value using *.INF files and RUNDLL is explained by Bill James.


Reading (exporting) from the registry

REGEDIT's /E switch can be used to export a registry key:

REGEDIT /E d:\path\filename.REG "HKEY_XXXX\Whatever Key"

This will write the registry key "HKEY_XXXX\Whatever Key" and its subkeys to a file named d:\path\filename.REG

The resulting (ASCII or UniCode) file will contain the entries in the format "key"="value", which can be stripped and parsed using Laurence Soucy's CHOICE trick for MS-DOS 6 and Windows 9*, NT's FOR /F or the more generic TYPE and FIND commands.

Instead of a file name, some device names can be used:


will print the selected key.
Unfortunately, this won't work for CON (console or display).

On most "modern" Windows installations, the PRN device is no longer available, as it requires an LPT or COM port.


Self-contained registry scripts

In .REG files, every line after the first one that starts with a semicolon (;) is treated as comment.
Batch files completely ignore the semicolons before commands.
So the following batch file will use itself as a .REG file:


; REGEDIT.EXE /S "%~f0"


The REGEDIT4 line is required, and must be the first line, otherwise REGEDIT.EXE won't accept the script as a valid .REG file.
However, it will generate an error message when running as a batch file, hence the CLS command to wipe the error message from the screen.
To prevent more error messages, EXIT is used to abort the batch file immediately after the REGEDIT.EXE command.

Use this technique to add or remove registry keys and values.



Most examples are for Windows 2000 and earlier Windows versions.
The reason is that as of Windows XP, REG.EXE is a native tool, which does not require temporary files.


page last modified: 2019-08-18