搜索和替换批处理文件的问题

15 浏览
0 Comments

搜索和替换批处理文件的问题

我有一个XML文件,并且我有一个批处理文件用于在该文件中搜索特定字符串,将其替换为用户定义的字符串,然后将其输出到一个新的XML文件中:

@echo off > entities_1.xml
setLocal EnableDelayedExpansion
if exist entities_1.xml del entities_1.xml
set /p name= 新空间名称是什么?
for /f "tokens=* delims= " %%G in (entities.xml) do (
set str=%%G
set str=!str:[测试空间]=[%name%]!
echo !str! >> entities_1.xml
)

这个方法有效,[测试空间]的任何实例都会被用户定义的值替换掉。

然而,我的问题是批处理文件也会删除叹号(!)标记的实例。例如,在XML中有类似于以下的行:


当运行批处理脚本时,它会将上述行替换为:

<[CDATA[TEST2]]>

即删除了叹号(!)。

我在哪里出错了?有什么想法吗?

0
0 Comments

问题:搜索和替换批处理文件出现的问题

原因:在启用延迟扩展的情况下,通过set str=%%G的方式接收一行是错误的。这是因为延迟扩展阶段在%%v扩展阶段之后。禁用延迟扩展会导致在安全方式下无法替换字符串。

解决方法:

1. 切换延迟扩展:

 off > entities_1.xml
setLocal DisableDelayedExpansion
if exist entities_1.xml del entities_1.xml
set /p name= What is the new space NAME?
for /f "tokens=* delims= " %%G in (entities.xml) do (
    set str=%%G
    setLocal EnableDelayedExpansion
    set str=!str:[Test Space]=[%name%]!
    >> entities_1.xml echo(!str!
    endlocal
)

2. 切换重定向,以避免始终添加空格。

3. 使用echo(,这样如果!str!为空,就不会显示echo is on

0
0 Comments

问题:搜索和替换批处理文件出现问题

问题原因:使用cmd作为shell时,使用>>命令无法创建空文件entities_1.xml

解决方法:在FOR循环之前使用TYPE NUL > entities_1.xml命令创建一个大小为零的文件entities_1.xml。感谢Benoit给出的建议。

0