批处理 - 使用延迟扩展以书面文件
问题描述:
这是我的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"
)
谢谢,我会尝试这一点,并让你知道。 – NewQueries 2012-02-23 13:12:52
我试过了,它工作得很好! – NewQueries 2012-02-23 15:08:44
但是,我看到Connections.xml文件有时没有第一行。所以在这种情况下,它会用tardersoeid_usersoeid替换tradersoeid的下一次发生。我不希望出现这种情况,所以我试图像下面的代码: – NewQueries 2012-02-23 15:14:50