[编辑]添加完整示例以显示确切问题[/ EDIT]
我正在清理一些日志文件,因此我可以将它们转换为XML,除了日志文件中的一些非XML兼容字符外,一切正常。
因此,我试图取代&与& .amp; (删除点),但不知何故,这似乎是一个问题。这是我的蝙蝠档案:
@echo off & setLocal enableDELAYedexpansion
set "find=&"
set "replace=&"
findstr /v "string1 string2" test.log > tmp_test.log
> test.xml (
echo ^<rows^>
for /f "tokens=5" %%A in (tmp_test.log) do (
set string=%%A
call set string=%%string:!find!=!replace!%%
echo ^<r a="!string!"/^>
)
echo ^</rows^>
)
del tmp_test.log
endlocal
这是一个简化的日志文件,基本思路是获取第5个令牌(URI)删除一些冗余的(包含string1或string2),替换XML不兼容的字符并将其保存为XML文件。
2014-03-27 00:00:12 123.45.67.890 GET /good_url.html?something=one&something_else=four - 8080
2014-03-27 00:00:12 123.45.67.890 GET /good_url.html - 8080
2014-03-27 00:00:12 123.45.67.890 GET /string2.html - 8080
2014-03-27 00:00:13 123.45.67.890 GET /string1.html - 8080
2014-03-27 00:00:13 123.45.67.890 GET /some_uri_with_html/%2e%2e%2f%2eini - 8080
这是输出:
<rows>
<r a="/good_url.html?something=one&something_else=four"/>
<r a="/good_url.html"/>
<r a="/some_uri_with_html/%2e%2e%2f%2eini"/>
</rows>
所以,除了Ampersand之外都很好,它似乎在这个过程中的某个地方从实体转换为单个char。
换句话说,我需要得到
<r a="/good_url.html?something=one&something_else=four"/>
有什么建议吗?
提前致谢!
答案 0 :(得分:1)
@echo off & setLocal enableDELAYedexpansion
set "find=&"
set "replace=&"
> test.xml (
echo ^<rows^>
for /f "tokens=5" %%A in ('findstr /v "string1 string2" test.log') do (
set "string=%%A"
set "string=!string:%find%=%replace%!"
echo ^<r a="!string!"/^>
)
echo ^</rows^>
)
输出:
<rows>
<r a="/good_url.html?something=one&something_else=four"/>
<r a="/good_url.html"/>
<r a="/some_uri_with_html/%2e%2e%2f%2eini"/>
</rows>
答案 1 :(得分:0)
如果您对&
使用此语法,则不需要转义set
:
set "var=value"
以下是改编的代码:
setlocal enabledelayedexpansion
set "find=&"
set "replace=&.amp;"
for %%A in ("Hello & World") do (
set string=%%~A
call set "string=%%string:!find!=!replace!%%"
echo ^<r a="!string!"/^>
)