reg

C:\Users\joychen>reg /? > reg.txt

REG Operation [Parameter List]

  Operation  [ QUERY   | ADD    | DELETE  | COPY    |
               SAVE    | LOAD   | UNLOAD  | RESTORE |
               COMPARE | EXPORT | IMPORT  | FLAGS ]

返回代码: (除了 REG COMPARE)

  0 - 成功
  1 - 失败

要得到有关某个操作的帮助,请键入:

  REG Operation /?

例如:

  REG QUERY /?
  REG ADD /?
  REG DELETE /?
  REG COPY /?
  REG SAVE /?
  REG RESTORE /?
  REG LOAD /?
  REG UNLOAD /?
  REG COMPARE /?
  REG EXPORT /?
  REG IMPORT /?
  REG FLAGS /?

reg add

C:\Users\joychen>reg add /? >> reg.txt

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

  KeyName  [\\Machine\]FullKey
           Machine  远程机器名 - 忽略默认到当前机器。远程机器上
                    只有 HKLM 和 HKU。
           FullKey  ROOTKEY\SubKey
           ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
           SubKey   所选 ROOTKEY 下注册表项的完整名。

  /v       所选项之下要添加的值名。

  /ve      为注册表项添加空白值名(默认)。

  /t       RegKey 数据类型
           [ REG_SZ    | REG_MULTI_SZ | REG_EXPAND_SZ |
             REG_DWORD | REG_QWORD    | REG_BINARY    | REG_NONE ]
           如果忽略,则采用 REG_SZ。

  /s       指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符
           如果忽略,则将 "\0" 用作分隔符。

  /d       要分配给添加的注册表 ValueName 的数据。

  /f       不用提示就强行覆盖现有注册表项。

例如:

  REG ADD \\ABC\HKLM\Software\MyCo
    添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo

  REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
    添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)

  REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
    添加一个值(名称: MRU,类型: REG_MUTLI_SZ,数据: fax\0mail\0\0)

  REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
    添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
    注意: 在扩充字符串中使用插入符号 ( ^ )

扩充字符串 REG_EXPAND_SZ

1、cmd
set inifile="^%SystemRoot^%\system32\NOTEPAD.EXE"
reg add HKEY_CLASSES_ROOT\inifile\shell\open\command /ve /t REG_EXPAND_SZ /d "%inifile% %1" /f

2、bat文件
set inifile="%%SystemRoot%%\system32\NOTEPAD.EXE"
reg add HKEY_CLASSES_ROOT\inifile\shell\open\command /ve /t REG_EXPAND_SZ /d "%inifile% %%1" /f

reg delete

C:\Users\joychen>reg delete /? >> reg.txt

REG DELETE KeyName [/v ValueName | /ve | /va] [/f]

  KeyName    [\\Machine\]FullKey
    Machine  远程机器名 - 忽略当前机器的默认值。
             远程机器上只有 HKLM 和 HKU。
    FullKey  ROOTKEY\SubKey
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
    SubKey   所选 ROOTKEY 下的注册表项的全名。
  ValueName  所选项下的要删除的值的名称。
             省略时,该项下的所有子项和值都会被删除。

  /ve        删除空白值名称的值(默认)。

  /va        删除该项下的所有值。

  /f         不用提示就强行删除。

例如:

  REG DELETE HKLM\Software\MyCo\MyApp\Timeout
    删除注册表项 Timeout 及其所有子项和值

  REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU
    删除 ZODIAC 上 MyCo 下的注册表项 MTU

例子

reg delete HKEY_CLASSES_ROOT\inifile\shell\print /f

reg query

C:\Users\joychen>reg query /? > reg.txt

REG QUERY KeyName [/v [ValueName] | /ve] [/s]
          [/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]

  KeyName  [\\Machine\]FullKey
           Machine - 远程机器名称,省略当前机器的默认值。在远程机器上
                     只有 HKLM 和 HKU 可用。
           FullKey - 以 ROOTKEY\SubKey 名称形式
                ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ]
                SubKey  - 在选择的 ROOTKEY 下的注册表项的全名

  /v       具体的注册表项值的查询。
           如果省略,会查询该项的所有值。

           只有与 /f 开关一起指定的情况下,此开关的参数才是可选的。它指定
           只在值名称中搜索。

  /ve      查询默认值或空值名称(默认)。

  /s       循环查询所有子项和值(如 dir /s)。

  /se      为 REG_MULTI_SZ 在数据字符串中指定分隔符(长度只为 1 个字符)。
           默认分隔符为 "\0"。

  /f       指定搜索的数据或模式。
           如果字符串包含空格,请使用双引号。默认为 "*"。

  /k       指定只在项名称中搜索。

  /d       指定只在数据中搜索。

  /c       指定搜索时区分大小写。
           默认搜索为不区分大小写。

  /e       指定只返回完全匹配。
           默认是返回所有匹配。

  /t       指定注册表值数据类型。
           有效的值是:
             REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ,
             REG_DWORD, REG_QWORD, REG_BINARY, REG_NONE
           默认为所有类型。

  /z       详细: 显示值名称类型的数字等值。

示例:

  REG QUERY HKLM\Software\Microsoft\ResKit /v Version
    显示注册表值版本的值

  REG QUERY \\ABC\HKLM\Software\Microsoft\ResKit\Nt\Setup /s
    显示远程机器 ABC 上的、在注册表项设置下的所有子项和值

  REG QUERY HKLM\Software\Microsoft\ResKit\Nt\Setup /se #
    用 "#" 作为分隔符,显示类型为 REG_MULTI_SZ 的所有值名称的所有
    子项和值。

  REG QUERY HKLM /f SYSTEM /t REG_SZ /c /e
    以区分大小写的形式显示项、值和数据和数据类型 REG_SZ
    的、在 HKLM 更目录下的、"SYSTEM" 出现的精确次数

  REG QUERY HKCU /f 0F /d /t REG_BINARY
    显示在 HKCU 根目录下、数据类型为 REG_BINARY 的数据的项、值和
    数据的 "0F" 出现的次数。

  REG QUERY HKLM\SOFTWARE /ve
    显示在 HKLM\SOFTWARE 下的项、值和数据(默认)

例子

reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer
    DllName    REG_EXPAND_SZ    %systemroot%\system32\w32time.dll
    Enabled    REG_DWORD    0x0
    InputProvider    REG_DWORD    0x0
    AllowNonstandardModeCombinations    REG_DWORD    0x1
    EventLogFlags    REG_DWORD    0x0
    ChainEntryTimeout    REG_DWORD    0x10
    ChainMaxEntries    REG_DWORD    0x80
    ChainMaxHostEntries    REG_DWORD    0x4
    ChainDisable    REG_DWORD    0x0
    ChainLoggingRate    REG_DWORD    0x1e


reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer /v Enabled

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer
    Enabled    REG_DWORD    0x0

其他

@echo off

:: 遍历注册表项
for /f "tokens=1,2,3 delims= " %%i in ('reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\WinSCP%%20temporary%%20session') do (
    if %%i==HostName   set HostName=%%k
    if %%i==UserName   set UserName=%%k
    if %%i==PortNumber set PortNumber=%%k
)

echo %HostName%
echo %UserName%
echo %PortNumber%

::16进制转10进制
set /a decPortNumber=%PortNumber%
echo %decPortNumber%

pause
注:路径中有%,需要转义

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\WinSCP%%20temporary%%20session

应用

set textfile="D:\cqy\backup\EditPlus3.70.1206\EditPlus_x64.exe"


reg add HKEY_CLASSES_ROOT\txtfile\shell\open\command /ve /t REG_EXPAND_SZ /d "%textfile% %%1" /f
reg delete HKEY_CLASSES_ROOT\txtfile\shell\print /f

reg add HKEY_CLASSES_ROOT\inifile\shell\open\command /ve /t REG_EXPAND_SZ /d "%textfile% %%1" /f
reg delete HKEY_CLASSES_ROOT\inifile\shell\print /f

reg delete HKEY_CLASSES_ROOT\batfile\shell\print /f