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

Batch批处理查找包含引号的XML标签子串失败问题求助

问题根因

你遇到的匹配失效有两个核心问题:

  1. 批处理的变量替换语法!line:search=replace!中,search位置默认读取字面量字符串,你直接写变量名myVariable不会自动读取该变量的存储值,系统只会尝试匹配行里的myVariable字符串,自然匹配失败。
  2. 目标搜索串里包含<重定向特殊符号,没有转义会被系统识别为IO操作,导致变量实际赋值结果和预期不符。

修复方案

方案1:沿用原有替换匹配逻辑,修正语法和转义

修改搜索变量赋值和匹配逻辑的写法,示例如下:

REM 注意<符号前加^转义,外层用引号包裹保证内部引号正常识别
SET "searchStr=^<assemblyIdentity name="PostDeploymentAction" version"

REM 先把搜索串赋值到临时变量,再做替换匹配
IF not "!line!"=="!line:%searchStr%=!" (
    ECHO 匹配到目标行:!line!
    REM 此处添加你的行修改逻辑
)

方案2:用findstr做匹配,稳定性更高(推荐)

不需要处理复杂的变量替换转义,直接用系统自带的字符串匹配命令判断,容错率更高:

REM /c参数表示匹配完整连续字符串,>nul屏蔽命令输出
ECHO !line! | findstr /c:"<assemblyIdentity name=\"PostDeploymentAction\" version" >nul 2>&1
IF !errorlevel! EQU 0 (
    ECHO 匹配到目标行:!line!
    REM 此处添加你的行修改逻辑
)

整合修复后的代码片段

@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
....some more code....
SET dllFile=%DestPath%\%ProjectName%.dll.manifest

IF NOT EXIST "%dllFile%" (
   ECHO File %ProjectName%.dll.manifest does not exist^^!
   GOTO ERROR
) ELSE (
   ECHO Modifying %ProjectName%.dll.manifest in directory:
   ECHO %DestPath%

   REM Create a temporary file in the folder, where this batch file is being executed from
   >"temp.xml" (
      FOR /F "usebackq delims=" %%I IN ("%dllFile%") DO (
        SET "line=%%I"

        REM 匹配目标行
        ECHO !line! | findstr /c:"<assemblyIdentity name=\"PostDeploymentAction\" version" >nul 2>&1
        IF !errorlevel! EQU 0 (
          REM 此处添加你的行修改逻辑,例如替换版本号
          SET "line=!line:旧版本号=新版本号!"
        )

        REM 输出处理后的行
        SETLOCAL DisableDelayedExpansion
        ECHO !line!
        ENDLOCAL
        ....some more code....
       )
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:00