您最大的问题将是<
和>
符号在 XML 文件中随处可见。(HTML也是)。
在批处理中,这些是重定向字符,并且会在处理包含它们的文本的每一行中导致错误,除非处理得非常小心。甚至可能在那时。
需要发生的是这些被其他东西取代。批处理转义字符^
+符号,或者完全是其他东西。转义它们的问题在于,每次将该字符串暴露给批处理命令时,转义字符都会消失。
因此,假设您转义了所有重定向符号。
下次您更改该字符串时,转义字符将通过转义重定向符号来工作,但这样做它们会“用完”并从字符串中消失。这意味着下次您对该字符串执行任何操作时,它们将不存在,并且会发生错误,因为您没有将任何内容重定向到任何内容。或者什么都没有,或者....等等。
您可以通过使用双引号将字符串括起来来解决这个问题,但是使用双引号会引入它自己的一组问题,并且这些问题取决于您如何使用这些双引号。你把它们放在字符串里吗?绕弦?或者你用它们包围你的命令。每种技术都有其缺点和局限性。其中之一是您无法将其中两种技术结合起来,更不用说您了。
最后,要在文件中间实际插入一行(事实上,除了结尾之外的任何地方),您需要创建一个新文件,并在到达其中的正确位置时将行添加到该文件中。这意味着您对数据行所做的所有更改都需要反转,然后重定向字符转义(因为用双引号将字符串括起来只会混淆您的 XML 解析器)。简单地消除烦人的字符根本不是一种选择。
你的肉是这样的:
setlocal enabledelayedexpansion
set source=c:\whatever.xml
set dest=c:\temp.xml
for /f "tokens=*" %%x in (%source%) do (
:: One technique for dealing with redirection characters
set "line=%%x"
make_line_palitable_to_batch
if (line_contains_flag) (
do_calculation_or_manipulation
echo restored_!line!>>%dest%
)
echo restored_!line!>>%dest%
)
move /y %dest% %source%
就是那几行伪代码make_line_palitable_to_batch
,restored_!line!
会害死你的。
需要替换的字符之一是
"
如果您致力于替换该字符,识别哪些行包含您需要的数据,以及在何处插入新数据,我将提供用于替换重定向字符的代码并在需要时修复您的代码。(请记住,替换双引号可能很棘手,但最基本的搜索和替换方法会起作用。)
完成此操作后,编辑您的问题以包含您的工作。
另外,你不必完美,只要付出一些努力,我会帮助你。