Batch file 用批处理文件中的特殊字符替换标记
我有一个包含xml页眉和xml页脚的xml文件,我想删除页眉和页脚,并将内容存储在一个变量中。xml文件的内容在循环中更改 例如: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=<
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
(因为这是批处理字符串的特殊字符)~
- 星号
(因为这是批处理字符串的特殊字符)*
- Tilde
查看我的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>