You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用批处理文件读取Hex文件指定内存地址值并校验

修复Hex文件地址值读取与对比的批处理脚本

原脚本的核心问题

  • 地址转换逻辑错误:set ADDRESS=A400是十六进制地址,但set /a默认按十进制解析,会导致ADDRESS_HEX变量赋值失败,无法匹配目标地址。
  • 预期值格式错误:EXPECTED_VALUE开头的空格会直接导致对比不匹配。
  • 变量清理语法错误:set "VALUE=%VALUE:=%"无法实现空格清理,正确语法应为set "VALUE=%VALUE: =%"。
  • 未处理延迟扩展:for循环内赋值的VALUE变量,外部直接读取会获取到循环前的空值。
  • 匹配规则不准确:certutil -dump输出的地址可能存在大小写差异,原脚本未做兼容。

修复后的完整脚本

@echo off
setlocal enabledelayedexpansion

REM 设置Hex文件路径
set "HEX_FILE=hex.hex"

REM 指定要检查的内存地址(十六进制,直接使用)
set "ADDRESS=A400"

REM 指定预期的十六进制值(无多余空格)
set "EXPECTED_VALUE=20A0E3EB"

REM 从Hex文件中读取指定地址对应的值
for /f "tokens=2 delims=: " %%a in ('certutil -f -dump !HEX_FILE! ^| findstr /i /b /c:"!ADDRESS!:"') do (
    set "VALUE=%%a"
)

REM 移除值中的所有空格
set "VALUE=!VALUE: =!"

REM 对比实际值与预期值
if /i "!VALUE!"=="!EXPECTED_VALUE!" (
    echo 文件%HEX_FILE%中地址%ADDRESS%的值正确:!VALUE!
) else (
    echo 文件%HEX_FILE%中地址%ADDRESS%的值不匹配。预期:%EXPECTED_VALUE%,实际:!VALUE!
)
    
pause
endlocal

关键修复点说明

  • 启用setlocal enabledelayedexpansion,使用!变量!的形式读取实时变量值,解决循环内变量赋值后无法立即获取的问题。
  • 直接使用十六进制地址,跳过错误的十进制转换步骤。
  • 清理预期值的多余空格,保证对比的准确性。
  • 修正空格清理的语法,正确移除值中的所有空格。
  • 在findstr中添加/i参数忽略大小写,适配certutil输出的地址大小写情况。

内容的提问来源于stack exchange,提问作者AVINASH SHIVANAND KUMBAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:16:13