Пакетный скрипт для поиска и замены 2 разных строк одновременно - PullRequest
0 голосов
/ 08 июня 2018

У меня есть XML-файл, подобный этому примеру:

  <fruit>
      <desc>xxx / yyy / zzz</desc>
  </fruit>
  <fruit>
      <desc></desc>
  </fruit>
  <fruit>
      <desc>abc / def / ghi</desc>
  </fruit>

Я использую пакетный скрипт для исправления узла "desc".Это результат после исправления:

  <fruit>    
      <desc>xxx/yyy/zzz</desc>    
  </fruit>    
  <fruit>    
      <desc>N/A</desc>    
  </fruit>    
  <fruit>    
      <desc>abc/def/ghi</desc>    
  </fruit>    

Как я могу заменить 2 разных строки, не сканируя все файлы дважды?Это скрипт:

@echo off
setlocal enabledelayedexpansion

set "input_xml=xmlfile.xml"

set "search=^<desc^>^</desc^>"
set "search2= / "
set "replace=^<desc^>N/A^</desc^>"
set "replace2=/"
for /f "delims=" %%i in ('type "!input_xml!" ^& break ^> "!input_xml!" ') do (
  set FixNullNode=%%i
  echo !FixNullNode:%search%=%replace%! >>"!input_xml!" 
)
for /f "delims=" %%v in ('type "!input_xml!" ^& break ^> "!input_xml!" ') do (
  set FixSpaceSlash=%%v
  echo !FixSpaceSlash:%search2%=%replace2%! >>"!input_xml!" 
)
pause

Спасибо

1 Ответ

0 голосов
/ 08 июня 2018

Просто переместите вторую замену в первую для команды.

@echo off
setlocal enabledelayedexpansion

set "input_xml=xmlfile.xml"

set "search=^<desc^>^</desc^>"
set "search2= / "
set "replace=^<desc^>N/A^</desc^>"
set "replace2=/"
for /f "delims=" %%i in ('type "!input_xml!" ^& break ^> "!input_xml!" ') do (
  set "Fix=%%i"
  set "Fix=!Fix:%search%=%replace%!"
  echo !Fix:%search2%=%replace2%! >>"!input_xml!" 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...