@echo off
color a
echo 请耐心等候...
setlocal enabledelayedexpansion
echo.>_tobat.bat
for /f "skip=2 tokens=*" %%i in ('type reg.reg') do (
set char=%%i
set char=!char:~0,1!
if !char!==[ (
set key=%%i
set key=!key:[HKEY_LOCAL_MACHINE=HKLM!
set key=!key:[HKEY_CURRENT_USER=HKCU!
set key=!key:[HKEY_CLASSES_ROOT=HKCR!
set key=!key:[HKEY_USER=HKU!
set key=!key:[HKEY_CUREENT_CONFIG=HKCC!
set key=!key:]=!
) else (
set vtd=%%i
for /f "tokens=1,2* delims==" %%i in ("!vtd!") do (
set v=%%i
set d=%%j
set t=REG_SZ
set type=!d:~0,4!
if !type!==dwor set t=REG_DWORD && set d=!d:dword:=!
if !type!==hex: set t=REG_BINARY && set d=!d:,=! && d=!d:hex:=!
echo reg add "!key!" /v !v! /t !t! /d !d! /f>>_tobat.bat
)
)
)
这是一段非常精妙的代码, 不过处理二进制值和默认值会出现问题.于是我将其修改为:
@echo off
setlocal enabledelayedexpansion
echo @echo off>%~n1.bat
for /f "skip=2 eol=' tokens=*" %%i in ('type %~1') do (
set char=%%i
set char=!char:~0,1!
if !char!==[- goto del
if !char!==[ (
set key=%%i
set key=!key:[HKEY_LOCAL_MACHINE=HKLM!
set key=!key:[HKEY_CURRENT_USER=HKCU!
set key=!key:[HKEY_CLASSES_ROOT=HKCR!
set key=!key:[HKEY_USERS=HKU!
set key=!key:[HKEY_CUREENT_CONFIG=HKCC!
set key=!key:]=!
) else (
set vtd=%%i
for /f "tokens=1,2* delims==" %%i in ("!vtd!") do (
set v=%%i
set d=%%j
set type=!d:~0,4!
set t=reg_sz
if !type!==dwor set t=reg_dword&set d=!d:dword:=!&set d=0x!d!
if !type!==hex: set t=reg_binary&set d=!d:hex:=!&set d=!d:,=!
set d=!d:\\=\!
set d=!d:%%=%%%%!
if !v!==@ set v=""
echo reg add "!key!" /v !v! /t !t! /d !d! /f>>%~n1.bat
)
)
)
type %~n1.bat | find "reg">nul 2>nul&&goto :eof
:del
set key=!key:[-HKEY_LOCAL_MACHINE=HKLM!
set key=!key:[-HKEY_CURRENT_USER=HKCU!
set key=!key:[-HKEY_CLASSES_ROOT=HKCR!
set key=!key:[-HKEY_USERS=HKU!
set key=!key:[-HKEY_CUREENT_CONFIG=HKCC!
set key=!key:]=!
echo reg delete "!key!" /f >>%~n1.bat