批处理 - 使用延迟扩展以书面文件

问题描述:

这是我的xml文件的一部分:批处理 - 使用延迟扩展以书面文件

<anyType xsi:type="xsd:string">dd32261_RealTimeRisk</anyType> 
<anyType xsi:type="xsd:boolean">false</anyType> 
<anyType xsi:type="xsd:string">dd32261</anyType> 

这里是我下面的代码:

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (

MOVE "%%G" "%%G.temp" 
for /f "usebackq tokens=*" %%b in ("%%G.temp") do (
set write=%%b 

echo !write:%tradersoeid%=%usersoeid%! >> "%%G" 
) 
del "%%G.temp" 
) 

什么上面的代码的作用是将替换所有所有脑干tradersoeid是“dd32261”,usersoeid是“ak15000”。这工作完美。

但我想要做的是将“dd32261”的第一行发生替换为“dd32261_ak15000”并将其替换为第二行。

我想是这样的:

set "val1=>" 
set "val2=_"  
set "str=%val1%%tradersoeid%%val2%" 

所以只要找到> dd32261_用>替换dd32261_userid

,并在找到> dd32261 <用>替换usersoeid <

谢谢

echo off 
set tradersoeid=dd32261 
set usersoeid=ak15000 
set ws_namestr=%tradersoeid%_%usersoeid% 
set id_=%tradersoeid%_ 

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (
MOVE "%%G" "%%G.temp" 
pause>nul  
for /F "usebackq delims=" %%b in ("%%G.temp") do (
    set write=%%b 
    for /f %%t in ("!id_!") do echo %%t 
    for /F %%u in ("!ws_namestr!") do set newWrite=!write:%%t=%%u! 

    echo !newWrite! >> "%%G" 
    if not "!newWrite!" == "!write!" (
     set id_=%tradersoeid% 
     ws_namestr=%usersoeid% 
    ) 
) 
    del "%%G.temp" 
) 

set tradersoeid=dd32261 

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (
    MOVE "%%G" "%%G.temp" 
    set usersoeid=%tradersoeid%_ak15000 
    for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
     set write=%%b 
     for /F %%u in ("!usersoeid!") do set newWrite=!write:%tradersoeid%=%%u! 
     echo !newWrite! >> "%%G" 
     if not "!newWrite!" == "!write!" set usersoeid=ak15000 
    ) 
    del "%%G.temp" 
) 

我以为你要替换d32261‘“的第一行一次出现’在每个文件

P.S.我建议你改变这一行:

for /F "usebackq tokens=*" %%b in ("%%G.temp") do (

通过这一个:

for /F "usebackq delims=" %%b in ("%%G.temp") do (

“delims =” 是标准的方式来获得全线。 “tokens = *”只用一个空格就能改变多个空格和制表符。

编辑新版本中添加

set tradersoeid=dd32261 
set usersoeid=ak15000 

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (
    MOVE "%%G" "%%G.temp" 
    for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
     set write=%%b 
     set newWrite=!write:%tradersoeid%_=%tradersoeid%_%usersoeid%_! 
     if "!newWrite!" == "!write!" set newWrite=!write:%tradersoeid%=%usersoeid%! 
     echo !newWrite! >> "%%G" 
    ) 
    del "%%G.temp" 
) 
+0

谢谢,我会尝试这一点,并让你知道。 – NewQueries 2012-02-23 13:12:52

+0

我试过了,它工作得很好! – NewQueries 2012-02-23 15:08:44

+0

但是,我看到Connections.xml文件有时没有第一行。所以在这种情况下,它会用tardersoeid_usersoeid替换tradersoeid的下一次发生。我不希望出现这种情况,所以我试图像下面的代码: – NewQueries 2012-02-23 15:14:50