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

如何从File1.txt提取属性名与单引号值并在File2.txt中匹配

问题与解决方案

需求说明

需要从File1.txt中读取属性名(例如SysValidate#URL)及单引号包裹的对应值(例如'/api/sys/test',一行多组单引号仅取第一组),并在File2.txt中验证该属性名与值的匹配情况。现有Windows批处理脚本仅能提取值,无法获取属性名,需修改脚本实现完整功能。

原脚本(仅能提取值)

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "usebackqdelims=" %%e IN ("C:\Users\k2\File1.txt") DO FOR %%y IN (%%e) DO (
 SET "word=%%y"
 IF "!word:~0,1!!word:~-1!"=="''" (
 ECHO Processing %%y
  FIND "!word:~1,-2!" "C:\Users\k2\File2.txt">nul
  IF ERRORLEVEL 1 (>>"C:\Users\k2\Results.txt" ECHO %%y - Failed) ELSE (>>"C:\Users\k2\Results.txt" ECHO %%y - Success)
 )
)

修改后的完整脚本

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: 清空结果文件
echo. > "C:\Users\k2\Results.txt"

FOR /f "usebackq delims=" %%e IN ("C:\Users\k2\File1.txt") DO (
    :: 仅处理属性覆盖记录行
    echo "%%e" | findstr /C:"BIP1140I: Overriding property" >nul
    if not errorlevel 1 (
        :: 提取属性名(行内第4个字段)
        for /f "tokens=4" %%p in ("%%e") do set "propName=%%p"
        
        :: 提取第一个单引号包裹的值
        set "line=%%e"
        set "value="
        set "inQuote="
        for /l %%i in (0,1,1000) do (
            if "!line:~%%i,1!"=="'" (
                if not defined inQuote (
                    set "inQuote=1"
                ) else (
                    set "inQuote="
                    goto :extractDone
                )
            ) else if defined inQuote (
                set "value=!value!!line:~%%i,1!"
            )
        )
        :extractDone
        
        if defined value (
            echo 正在处理 !propName! = !value!
            :: 精确匹配属性名+值的完整行
            findstr /C:"!propName! = !value!" "C:\Users\k2\File2.txt" >nul
            if errorlevel 1 (
                >>"C:\Users\k2\Results.txt" echo !propName! - 值不匹配(预期:!value!)- Failed
            ) else (
                >>"C:\Users\k2\Results.txt" echo !propName! - 值匹配 - Success
            )
        )
    )
)

ENDLOCAL

脚本关键逻辑说明

  • 过滤目标行:只处理包含BIP1140I: Overriding property的行,跳过无关日志内容
  • 提取属性名:利用tokens=4分割行内容,直接获取第4个字段(即属性名)
  • 提取目标值:通过遍历行内字符,识别第一个单引号的起止位置,提取内部内容,确保只取第一组单引号的值
  • 精确匹配验证:使用findstr /C:进行完整字符串匹配,确保属性名 = 值的组合在File2.txt中完全存在
  • 结果输出:将匹配状态(成功/失败)及预期值写入结果文件,便于查看

测试结果示例

根据提供的File1.txt和File2.txt,运行脚本后Results.txt内容如下:

SysValidate#URL - 值匹配 - Success
SystValidate#Sendemail - 值匹配 - Success
API_Analytics#username - 值不匹配(预期:testUser)- Failed
API_Analytics#password - 值不匹配(预期:testPassword#)- Failed
API_Analytics#realm - 值不匹配(预期:provider)- Failed

内容的提问来源于stack exchange,提问作者Chris_dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:33:13