对于/ F二进制寄存器值neq(结果=总是成功)

时间:2018-06-07 23:49:59

标签: batch-file for-loop if-statement hex registry

我错过了什么?

我尝试从UserPreferencesMask获取二进制密钥值,二进制值为9032078010000000(或hex:90,32,07,80,10,00,00,00中的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)。

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。但是,当我只是添加一些数字(在注册表中)然后我总是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

1 个答案:

答案 0 :(得分:1)

以下是我在Reg.exe循环中使用For的方法:

@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选项,则应执行以下任务:< / p>

@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