首页 > 解决方案 > 对于 /F 二进制 reg 值 neq(结果 = 总是成功)

问题描述

我错过了什么?

我尝试从 中获取二进制键值UserPreferencesMask,二进制值是9032078010000000(或hex:90,32,07,80,10,00,00,00in regedit)。

结果%%A确实打印9032078010000000,但是当我在/与if %% NEQEQU我总是使用这个结果时goto:HEX_okay

for /f "skip=2 tokens=3 delims= " %%A in ('reg query "HKCU\Control Panel\Desktop" /f UserPreferencesMask /d /T REG_BINARY') do (
  echo.RESULT="%%A"
  REM if %%a NEQ 9032078010000000 goto FiX
  if %%A EQU 9032038010000000 goto HEX_okay
  goto:FiX
)

我使用skip=2是因为我不使用第一2行,并且delims= "跳到3rd令牌,有点说话......

编辑:

UserPreferencesMask必须是(二进制值),如果不是,请将其9032078010000000更改为此特定的二进制值(使用 reg add)。

IE。 REG.exe ADD "HKCU\Control Panel\Desktop" /V "UserPreferencesMask" /T REG_BINARY /D "9032078010000000" /F

我也试过:

for /f "tokens=3" %%i in ('reg query "HKCU\Control Panel\Desktop" /v UserPreferencesMask /t REG_BINARY') do (
  echo.RESULT="%%i"
  IF NOT %%i equ 9032038010000000 goto FiX
  IF %%i equ 9032038010000000 goto HEX_okay
  goto:DO_NOTING
)

...但是结果相同并更改equ==也无济于事。

当我在 regedit 中更改UserPreferencesMask的值并放置aa(或其他任何东西)时,我确实得到了一些结果;goto FiX. 但是当我只是添加一些数字(在regedit中)时,我总是goto HEX_okay很烦人:'(

这些下一个更改(如下)也无​​济于事,然后总是goto FIX

  IF NOT "%%i"=="9032038010000000" goto FiX
  IF "%%i"=="9032038010000000" goto HEX_okay

这些下一行似乎确实“有效”,很好地分类:

当我将“UserPreferencesMask”的二进制值更改为不仅仅是 1 或 2 位数字时,它似乎确实按预期工作......奇怪而不完全是“猴子证明”,它并不总是按预期工作。

for /f "skip=2 tokens=3 delims= " %%i in ('reg query "HKCU\Control Panel\Desktop" /F "UserPreferencesMask" /D /C /E /T REG_BINARY') do (
  echo.RESULT="%%i"
  IF NOT %%i equ 9032038010000000 goto FiX
  IF %%i equ 9032038010000000 goto HEX_okay
  goto:NO_UserPreferencesMask
)

PS。我可以使用for /f "tokens=3"相同的结果

这种解决方法似乎确实有效:

reg query "HKCU\Control Panel\Desktop" /F "UserPreferencesMask" /D /C /E /T REG_BINARY | find /i "9032078010000000"
    if errorlevel 1 goto FiX
    if errorlevel 0 goto HEX_okay

标签: batch-filefor-loopif-statementhexregistry

解决方案


这是我Reg.exeFor循环中使用的方法:

@Echo Off
Set "DUPM=9032078010000000"
Set "MASK="
For /F "EOL=H Tokens=2*" %%A In (
    'Reg Query "HKCU\Control Panel\Desktop" /V UserPreferencesMask'
) Do If /I Not "%%B"=="%DUPM%" Set "MASK=%%B"
If Not Defined MASK GoTo HEX_okay

:FiX
Echo The value data %MASK% needs fixing!
Pause
GoTo :EOF

:HEX_okay
Echo The value data matches %DUPM%!
Pause
GoTo :EOF

编辑
根据您的评论,并且鉴于您仍然没有Reg Query正确/有效地使用这些选项,您应该如何执行该任务:

@Echo Off
Reg Query "HKCU\Control Panel\Desktop" /V UserPreferencesMask|Find /I "9032078010000000" >Nul && GoTo HEX_okay

:FiX
Echo The value data needs fixing!
Pause
GoTo :EOF

:HEX_okay
Echo The value data matches!
Pause
GoTo :EOF

旁注:正如我在评论中提到的,你为什么不简单地添加密钥?如果现有密钥匹配,则覆盖它并不重要,如果不匹配,则您已更改它:

Reg Add "HKCU\Control Panel\Desktop" /V UserPreferencesMask /T REG_BINARY /D 9032078010000000 /F>Nul

推荐阅读