Batch file 用批处理文件中的特殊字符替换标记

Batch file 用批处理文件中的特殊字符替换标记,batch-file,Batch File,我有一个包含xml页眉和xml页脚的xml文件,我想删除页眉和页脚,并将内容存储在一个变量中。xml文件的内容在循环中更改 例如: for (some range) do ( set "xmlHeader=<?xml version="1.0" encoding="UTF-8"?><Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">" set "xmlFooter=<

我有一个包含xml页眉和xml页脚的xml文件,我想删除页眉和页脚,并将内容存储在一个变量中。xml文件的内容在循环中更改

例如:

for (some range) do (
set "xmlHeader=<?xml version="1.0" encoding="UTF-8"?><Config  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">"
set "xmlFooter=</Config>"

<then get and set variable from xml file>
)
但替代者什么也没做。请帮忙!谢谢。

尝试一下:

例如:

    >type file
    <?xml version="1.0" encoding="UTF-8"?><Config  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
    <tag1>info1 changes in the loop</tag1>
    <tag2>info2 changes in the loop</tag2>
    </Config>

    >sed -r "\#xml version|</Config>#d; s#^(<[^>]+>\S+)[^<]+(<[^>]+>)#\1\2#" file
    <tag1>info1</tag1>
    <tag2>info2</tag2>
>类型文件
info1循环中的变化
info2循环中的变化
>sed-r“\ \xml版本|#d;s#^(]+>\s+[^)\\1\2”文件
信息1
信息2
批量字符串替换
%Var:Term=Replace%

以下是处理批处理的字符串替换时必须遵循的一些规则

  • 要替换的字符串(搜索项)不能包含以下任何字符
    • 等号
      =
      (因为这是它知道搜索词结束的方式)
  • 要替换的字符串(搜索词)不能以以下字符开头
    • Tilde
      ~
      (因为这是批处理字符串的特殊字符)
    • 星号
      *
      (因为这是批处理字符串的特殊字符)
解决 请参阅DBenham提供的100%批量解决方案

有关Batch/JScript混合解决方案,请参见DBenham


查看我的100%批处理的概念证明。

我知道这不是很有帮助,但这是发明这种东西的目的。这是什么:
循环中的更改
?批处理XML是很棘手的。你可以很容易地用意外的
来破坏代码,在这种情况下,使用xmlstarlet,
XML sel-t-c”/Config/node()"-n file.xml
Answer to endro。循环中的更改意味着此文本将在for循环中更改。这对于我尝试执行的文本操作来说并不重要。因此,我们可以假设标记中的字符串是常量。再次感谢endro。这适用于不同行上的配置。当输入位于for的同一行上时,如何执行此操作r示例:info1循环中的更改info2循环中的更改我尝试了另一种使用sed的方法。这在Linux上有效,但在Windows上不执行任何操作:set“xmlHeader=”sed-e“s@%xmlHeader%@@g”-i.backup xmlFile.xml有什么建议吗?这不是问题所在。请不要强化问题。提出新问题。我已使用sed发布了一个新问题,网址是:Thank endro。我希望在xml都在一行的情况下,您能提供更多关于该案例的信息。但我会接受您给出的答案,当它们位于不同的l上时,请解决该案例伊内斯。
<tag1>info1</tag1>
<tag2>info2</tag2>
for (outer loop condition ) do (
for /f "Tokens=* Delims=" %%c in (xmlFile.xml) do set config=%%c
"!config:%xmlHeader%=!"
echo "!config!"
)
    >type file
    <?xml version="1.0" encoding="UTF-8"?><Config  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
    <tag1>info1 changes in the loop</tag1>
    <tag2>info2 changes in the loop</tag2>
    </Config>

    >sed -r "\#xml version|</Config>#d; s#^(<[^>]+>\S+)[^<]+(<[^>]+>)#\1\2#" file
    <tag1>info1</tag1>
    <tag2>info2</tag2>