在 DOS 批处理字符串替换命令中转义等号

2023-12-14

我需要使用 DOS 批处理文件替换 JNLP 文件中的一些文本,以针对本地计算机进行调整。

问题在于搜索模式包含一个等号,这会扰乱批处理文件中的字符串替换。

我想换线

<j2se version="1.5" initial-heap-size="100M" max-heap-size="100M"/>

具有初始和最大堆大小的特定设置。

例如我现在有,

for /f "tokens=* delims=" %%a in (%filePath%agility.jnlp) do (
set str=%%a
set str=!str:initial-heap-size="100M"=initial-heap-size="%min%M"!
echo !str!>>%filePath%new.jnlp)

但搜索模式中的 = 被读取为替换命令的一部分。

如何转义等号以便将其作为文本处理?


最好的解决办法是下载并安装Cygwin or GNUWin32但是,如果您确实仅限于标准命令处理器,那么它可能会变得有点混乱。

这不是世界上最快的方法,但至少是实用的。该命令文件一次处理每一行一个字符,特别处理您找到要查找的节的情况。

@echo off
set init=50M
set max=75M
setlocal enableextensions enabledelayedexpansion
for /f "tokens=* delims=" %%a in (agility.jnlp) do (
    set str1=%%a
    call :morph
    echo !str2!>>agility_new.jnlp
    echo !str2!
)
endlocal
goto :eof

:morph
    set str2=
:morph1
    if not "x!str1!"=="x" (
        if "!str1:~0,18!"=="initial-heap-size=" (
            set str2=!str2!initial-heap-size="!init!"
            set str1=!str1:~24!
            goto :morph1
        )
        if "!str1:~0,14!"=="max-heap-size=" (
            set str2=!str2!max-heap-size="!max!"
            set str1=!str1:~20!
            goto :morph1
        )
        set str2=!str2!!str1:~0,1!
        set str1=!str1:~1!
        goto :morph1
    )
    goto :eof

使用输入文件:

<j2se version="1.5" initial-heap-size="100M" max-heap-size="100M"/>
next line
===

你最终会得到:

<j2se version="1.5" initial-heap-size="50M" max-heap-size="75M"/>
next line
===
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 DOS 批处理字符串替换命令中转义等号 的相关文章

随机推荐