这可能很容易,但网上没有答案.我想通过批处理将XML行回显到文件中,但它误解了重定向">"的XML结束标记.该行如下:
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以提示批量解析器不解释特殊字符串?我使用双引号但它也将它们写入文件!echo之后文件应如下所示:
<?xml version="1.0" encoding="utf-8" ?>
Run Code Online (Sandbox Code Playgroud)
Joe*_*oey 96
您可以使用以下命令转义shell元字符^
:
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
Run Code Online (Sandbox Code Playgroud)
请注意,由于echo
是内置的shell,它不遵循有关引用的常规约定,因此只需引用参数将输出引号而不是删除引号.
orb*_*boy 21
为了在Windows上使用带有echo的特殊字符,例如'>',您需要在它之前放置一个特殊的转义字符.
例如
echo A->B
Run Code Online (Sandbox Code Playgroud)
将无效,因为'>'必须通过'^'进行转义:
echo A-^>B
Run Code Online (Sandbox Code Playgroud)
另请参见转义序列.
有一个简短的批处理文件,它打印一组基本的特殊字符及其转义序列.
wal*_*2mi 20
另一种方法:
@echo off
for /f "useback delims=" %%_ in (%0) do (
if "%%_"=="___ATAD___" set $=
if defined $ echo(%%_
if "%%_"=="___DATA___" set $=1
)
pause
goto :eof
___DATA___
<?xml version="1.0" encoding="utf-8" ?>
<root>
<data id="1">
hello world
</data>
</root>
___ATAD___
rem #
rem #
Run Code Online (Sandbox Code Playgroud)
jeb*_*jeb 16
一个简单的解决方案是使用延迟扩展,因为这不会改变任何特殊字符.
set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
echo !line!
) > myfile.xml
Run Code Online (Sandbox Code Playgroud)
编辑:另一种解决方案是使用消失的报价.
此技术使用引号引用特殊字符
@echo off
setlocal EnableDelayedExpansion
set ""="
echo !"!<?xml version="1.0" encoding="utf-8" ?>
Run Code Online (Sandbox Code Playgroud)
这个技巧有效,因为在特殊字符阶段,前导引号!"!
将保留行的其余部分(如果没有其他引号).
在延迟扩展阶段,!"!
将替换为变量的内容"
(单引号是合法的名称!).
如果您正在使用禁用延迟扩展,则可以使用FOR /F
循环.
for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>
但由于看起来有点烦人,你也可以建立一个宏.
set "print=for /f %%^" in ("""") do echo(%%~""
%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping
Run Code Online (Sandbox Code Playgroud)
Ale*_*s G 10
输出>
字符的方法是在前面加上^
转义字符:
echo ^>
Run Code Online (Sandbox Code Playgroud)
将打印简单
>
Run Code Online (Sandbox Code Playgroud)