我有一个XML文件,我有一个批处理文件来搜索该文件中的特定字符串,将其替换为用户定义的字符串,然后将其输出到新的XML文件:
@echo off > entities_1.xml
setLocal EnableDelayedExpansion
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
set str=!str:[Test Space]=[%name%]!
echo !str! >> entities_1.xml
)
Run Code Online (Sandbox Code Playgroud)
这有效,[Test Space]的任何实例都将替换为用户定义的值.
然而,我的问题是批处理文件也是剥离感叹号(!)标记的实例.例如,在XML中有类似于这样的行:
<property name="title"><![CDATA[TEST2]]></property>
Run Code Online (Sandbox Code Playgroud)
运行批处理脚本时,它正在用以下代码替换:
<property name="title"><[CDATA[TEST2]]></property>
Run Code Online (Sandbox Code Playgroud)
即剥离!
我哪里错了?有任何想法吗?
在启用延迟扩展时,设置str = %% G是错误的接收线路的方法.
这是因为延迟扩展阶段是在%% v扩展阶段之后.
对于禁用延迟扩展,您遇到了问题,即您无法以安全的方式替换字符串.所以你必须切换延迟扩展.
@echo 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
)
Run Code Online (Sandbox Code Playgroud)
切换重定向,因此您不会总是追加空格.
使用echo(如果!str!为空,则不会显示回声.
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |