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

我正在尝试从.reg文件编辑现有的registry项。 我想将key的值(这是一个reg_expand_sz值)更改为不同的值(值是文件path)。 我尝试这样做:

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

哪个没用 我该怎么做呢?

看起来像Windows(7)在那里接受值为十六进制。 最容易理解的方法是手动编辑它,然后在注册表编辑器中进行导出。 会告诉你该怎么做。

我做到了,得到了这一点,它的工作原理。

 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 

使用PowerShell

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

Set-ItemProperty

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

REG_EXPAND_SZ :包含对环境变量的未扩展引用的空终止字符串(例如“%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作为包含对环境变量(例如%HomeDrive%,%App%,%SystemRoot%…)的未展开引用的以空字符结尾的字符串。

使用powershell是非常棘手的,以避免变量的扩展。 我正在使用的解决方案调用RegistryKey.GetValue方法(字符串,对象,RegistryValueOptions)有点冗长,但其基本原理已在https://www.sepago.com/blog/2013/08/22/reading-和写作,regexpandsz数据与- 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)