我正在尝试使用%0
运算符和for
命令的分隔符从批处理文件输出XML文档。当我在XML中包含批处理变量时,它们不会被解析。我可以修改jar" basedir=".">
语句或找到另一种解决方法来替换XNL中的值吗?
set project=TEST
echo[ 2>build.xml
for /f "useback delims=" %%_ in (%0) do (
if "%%_"=="___ATAD___" set $=
if defined $ echo(%%_ >> build.xml
if "%%_"=="___DATA___" set $=1
)
goto :eof
___DATA___
<?xml version="1.0" encoding="UTF-8"?>
<project name="%project%" default="jar" basedir=".">
</project>
___ATAD___
答案 0 :(得分:1)
您必须启用delayedexpansion才能获取变量的值。
@echo off
setlocal enabledelayedexpansion
set project=TEST
echo[ 2>build.xml
for /f "delims=" %%_ in (%~nx0) do (
if "%%_"=="___ATAD___" set $=
if defined $ echo(%%_ >> build.xml
if "%%_"=="___DATA___" set $=1
)
goto :eof
___DATA___
<?xml version="1.0" encoding="UTF-8"?>
<project name="!project!" default="jar" basedir=".">
</project>
___ATAD___
另一个解决方案是使用@XML
获取已定义字符串(我的示例中为Findstr
)的行号,然后使用More
获取此字符串后面的行。
示例:
@echo off
setlocal enabledelayedexpansion
set project=TEST
for /f "delims=" %%a in ('findstr /Bn "@XML" %~nx0') do set /a $Line=%%a 2>nul
(for /f "delims=" %%a in ('more +%$Line% %~nx0') do echo %%a) >build.xml
goto :eof
@XML
<?xml version="1.0" encoding="UTF-8"?>
<project name="!project!" default="jar" basedir=".">
</project>