如何从命令提示符修改reg_expand_sz值?

时间:2013-05-14 22:20:36

标签: windows batch-file registry

我正在尝试从.reg文件编辑现有的注册表项。我想更改密钥的vaue,这是一个reg_expand_sz值到另一个(值是文件路径)。我尝试这样做:

Windows Registry Editor Version 5.00

["HKEY_CURRENT_USER\Control Panel\Cursors"]
"Arrow"=REG_EXPAND_SZ:"%SystemRoot%\System32\VIRUS\Virus\newArrow.cur"

哪个不起作用。我该怎么做呢?

4 个答案:

答案 0 :(得分:2)

使用PowerShell

sp 'hkcu:control panel/cursors' arrow `
  '%SystemRoot%/System32/VIRUS/Virus/newArrow.cur'

Set-ItemProperty

答案 1 :(得分:1)

似乎windows(7)在那里接受值为十六进制。 理解它的最简单方法是手动编辑它,然后在regedit应用程序中导出。会告诉你该怎么做。

我做到了并且得到了它并且它有效。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Cursors]
"Arrow"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,56,00,\
  49,00,52,00,55,00,53,00,5c,00,56,00,69,00,72,00,75,00,73,00,5c,00,6e,00,65,\
  00,77,00,41,00,72,00,72,00,6f,00,77,00,2e,00,63,00,75,00,72,00,00,00

答案 2 :(得分:1)

REG_SZ :以null结尾的字符串。这将是Unicode或ANSI字符串,具体取决于您使用的是Unicode还是ANSI函数。

REG_EXPAND_SZ :以null结尾的字符串,其中包含对环境变量的未展开引用(例如,“%PATH%”)。它将是Unicode或ANSI字符串,具体取决于您使用的是Unicode还是ANSI函数。要展开环境变量引用,请使用Expand EnvironmentStrings函数

例如:C:\(%HomeDrive%)

REG_SZ :@ =“C:\”

REG_EXPAND_SZ :@ = hex(2):43,00,3a,00,5c,00,00,00

因此,您必须将 REG_EXPAND_SZ 用于包含对环境变量的未扩展引用的以null结尾的字符串(例如%HomeDrive%,%App%,%SystemRoot%...)。

答案 3 :(得分:0)

使用powershell很难避免变量的扩展。我正在使用的解决方案,调用RegistryKey.GetValue Method (String, Object, RegistryValueOptions)有点冗长,但其基本原理在https://www.sepago.com/blog/2013/08/22/reading-and-writing-regexpandsz-data-with-powershell中有详细描述

$Hive = [Microsoft.Win32.Registry]::LocalMachine
$keypath='SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems'
$Key = $Hive.OpenSubKey($keypath, $True)

# prevent expansion
$oldValue = $Key.GetValue($valueName, $False, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)

# update the value
$newValue = $oldValue -replace '(^.*SharedSection=\d+,\d+),(\d+) (.*$)', "`$1,$newHeap `$3"
$Key.SetValue($valueName, $newValue, [Microsoft.Win32.RegistryValueKind]::ExpandString)