批处理文件%0字符串替换

时间:2014-09-19 09:57:12

标签: batch-file metaprogramming

我正在尝试使用%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___

1 个答案:

答案 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>