batch-file - 对于 /F 二进制 reg 值 neq(结果 = 总是成功)
问题描述
我错过了什么?
我尝试从 中获取二进制键值UserPreferencesMask
,二进制值是9032078010000000
(或hex:90,32,07,80,10,00,00,00
in 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)。
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
解决方案
这是我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
推荐阅读
- forms - 使用嵌套组件 vuejs 提交表单的最佳实践
- python - 使用 scapy.sniff 嗅探网络 (ARP) 流量
- r - rJava for R 安装在 Windows 机器上失败
- r - 沿 r 中的列按类别运行方程
- c - CS50 凯撒密码问题:程序不产生任何结果
- python - Pandas Dataframe - 在匹配行之前/之后获取第 N 行
- excel - 逐行条件格式
- mysql - 检查另一列 (2) 中的值的列 (1) 的约束等于“字符串 1”和“字符串 2”,将列 (1) 设置为不为空
- php - 在 Laravel 和 Livewire 中抛出 errorException 时捕获
- python - Python 内存地址:Linux 上 Python 3.5 - 3.9 的变化