批处理 - 在写入文件时使用延迟扩展

时间:2012-02-22 22:18:40

标签: batch-file dos

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

上面的代码所做的是将“dd32261”替换为“dd32261”与“ak15000”的usersoeid。这很完美。

但我想要做的是将“dd32261”的第一行出现替换为“dd32261_ak15000”,并按原样替换第二行。

我试过这样的事情:

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

所以无论何时找到&gt; dd32261 _ ,请将其替换为&gt; dd32261_userid

当找到&gt; dd32261&lt; 时将其替换为&gt; usersoeid&lt;

由于

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

答案 0 :(得分: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"
)