Для / F двоичного значения reg neq (результат = всегда успех) - PullRequest
0 голосов
/ 08 июня 2018

Что мне не хватает?

Я пытаюсь получить значение двоичного ключа из UserPreferencesMask, двоичное значение равно 9032078010000000 (или hex:90,32,07,80,10,00,00,00 в regedit).

Результат %%A печатает 9032078010000000, но когда я использую этот результат в / с if %% NEQ или EQU, я всегда 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, вроде как ...

edit:

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 в == тоже не помогает.

когда я изменяю значение для UserPreferencesMask в regedit и помещаю aa (или что-либо еще), я получаю некоторый результат;goto FiX.НО, когда я просто добавляю несколько чисел (в regedit), я всегда goto HEX_okay, поэтому раздражает: '(

Эти следующие изменения (ниже) тоже не помогают, тогда это всегда, goto FIX:

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

Эти следующие строки действительно работают, WELL SORT OFF:

, когда я изменяю двоичное значение «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 голосов
/ 08 июня 2018

Вот как я бы это сделал, используя 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 правильно / эффективно, вот как вы должны выполнить эту задачу:

@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
...