2012-02-22 57 views
0

這是我的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" 
) 

回答

1
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