Пакетная обработка - использование отложенного расширения при записи в файл - PullRequest
0 голосов
/ 23 февраля 2012

Это часть моего 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 <</strong> замените его на> usersoeid <</p> Спасибо

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 Ответ

1 голос
/ 23 февраля 2012
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 " в каждом файле .

PS Я предлагаю вам изменить эту строку:

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"
)
...