我错过了什么?
我尝试从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
令牌,有点说话......
修改
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
答案 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