2014-09-19 108 views
0

我試圖從批處理文件輸出一個XML文檔,使用%0運算符和for命令的分隔符。當我在XML中包含批處理變量時,它們不會被解析。我可以修改jar" basedir=".">聲明或找到另一種解決方法來替換XNL中的值嗎?批處理文件%0字符串替換

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

您必須啓用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___ 

另一種解決方案是與Findstr得到行號定義的字符串的(在我的例子@XML),然後得到使用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> 
相關問題