在XML文件中查找和替换多个字符串

更快的岩石

我想一次查找并替换单个或多个XML文件中的多个字符串。我试过参数化xml输入文件并传递变量以查找和替换匹配模式。使用for循环非常耗时,因为它是嵌套for循环。我们可以用“如果存在”写吗

代码如下:
-用于查找/替换脚本

@echo off
setlocal enableextensions disabledelayedexpansion
set "search="%~1""
set "replace="%~2""
set "textfile=%3"

  for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        set "line=!line:%search%=%replace%!"
        >>"%textFile%" echo(!line!
        endlocal
    )

-输入变量

 @echo off

set source=<SRCpath>"
set target=<TGTpath>

xcopy /Y %<SRC>%\* %<TGT>%\*
dir /s /b "%TGT%\*.xml" > filenames.txt -- for multi i/p files
set filename="<i/p>\filenames.txt"
set paramfile="<variable values path>\parm.txt"
FOR /F "tokens=*" %%i IN ('type "%filenames%"') DO (
for /f "tokens=1,2 delims=" %%j in ('type "%parm%"') do call <Find/Replace script.bat> %%j %%k %%i 
)
动作

打扰一下。如果我正确理解了您的评论,那么您的问题就不是“在XML文件中查找和替换多个字符串”(因为您已经有解决该问题的代码),而是有效地做到了您的要求应该非常清楚,否则您将得到无法解决问题的答案(浪费了尝试帮助您的人员的时间)。

您的代码有几种构造特别慢。下面的代码使用相同的方法“查找和替换字符串”,但是使用了更有效的构造。

@echo off

set source=<SRCpath>"
set target=<TGTpath>

xcopy /Y %<SRC>%\* %<TGT>%\*
set paramfile="<variable values path>\parm.txt"
rem Process all .xml files
FOR /F "tokens=*" %%f in ('dir /s /b "%TGT%\*.xml"') do (
   rem Process all lines in each file
   (for /f "usebackq delims=" %%i in ("%%f") do (
      set "line=%%i"
      setlocal EnableDelayedExpansion
      rem Replace all strings in paramfile
      for /f "usebackq tokens=1,2" %%j in ("%parm%") do (
         set "line=!line:%%j=%%k!"
      )
      echo(!line!
      endlocal
   )) > tempfile.tmp
   move /Y tempfile.tmp "%%f"
)

请注意,我使用了与您完全相同的代码,并且只是重新排列了代码以提高性能。这意味着您必须修复代码可能包含的所有缺失值,错误等。

编辑添加替换行的范围

下面的修改允许指定特定范围的行来执行查找/替换;批处理文件的参数中提供了可选范围。

@echo off
setlocal

set "ifInRange="
set "endIf="
rem If two parameters are given, they specify the desired range of lines for replacements
if "%~2" equ "" goto begin

set "ifInRange=if %%h geq %1 if %%h leq %2 ("
set "endIf=)"

:begin

set source=<SRCpath>"
set target=<TGTpath>

xcopy /Y %<SRC>%\* %<TGT>%\*
set paramfile="<variable values path>\parm.txt"
rem Process all .xml files
FOR /F "tokens=*" %%f in ('dir /s /b "%TGT%\*.xml"') do (
   rem Process all lines in each file
   (for /f "tokens=1* delims=:" %%h in ('findstr /N "^" "%%f"') do (
      set "line=%%i"
      setlocal EnableDelayedExpansion
      rem Check if a line range was given
      %ifInRange%
         rem Replace all strings in paramfile
         for /f "usebackq tokens=1,2" %%j in ("%parm%") do (
            set "line=!line:%%j=%%k!"
         )
      %endIf%
      echo(!line!
      endlocal
   )) > tempfile.tmp
   move /Y tempfile.tmp "%%f"
)

编辑2回复评论

您可以将行范围指定为批处理文件的参数。例如,要处理20到60行:

batchFileName.bat 20 60

但是,如果行的范围始终相同,则可以通过以下方式简化代码:

@echo off
setlocal

set source=<SRCpath>"
set target=<TGTpath>

xcopy /Y %<SRC>%\* %<TGT>%\*
set paramfile="<variable values path>\parm.txt"
rem Process all .xml files
FOR /F "tokens=*" %%f in ('dir /s /b "%TGT%\*.xml"') do (
   rem Process all lines in each file
   (for /f "tokens=1* delims=:" %%h in ('findstr /N "^" "%%f"') do (
      set "line=%%i"
      setlocal EnableDelayedExpansion
      rem Check if the line is in range
      if %%h geq 20 if %%h leq 60 (
         rem Replace all strings in paramfile
         for /f "usebackq tokens=1,2" %%j in ("%parm%") do (
            set "line=!line:%%j=%%k!"
         )
      )
      echo(!line!
      endlocal
   )) > tempfile.tmp
   move /Y tempfile.tmp "%%f"
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在XML文件中查找和替换多个字符串

来自分类Dev

替换多个文件中的多个字符串

来自分类Dev

Excel宏可在任何文本文件中查找和替换多个字符串

来自分类Dev

Excel宏可在任何文本文件中查找和替换多个字符串

来自分类Dev

使用 CSV 文件中的键->值对替换 XML 中的多个字符串

来自分类Dev

Python:将多个字符串替换为文件中的多个字符串

来自分类Dev

使用Visual Studio IDE搜索多个字符串查找和替换

来自分类Dev

如何使用sed来查找和替换具有多个字符串的模式?

来自分类Dev

在多个文件中查找和替换字符串

来自分类Dev

如何替换字符串中的多个字符?

来自分类Dev

替换字符串中的多个字符

来自分类Dev

如何使用 PowerShell 替换正确替换给定文件中的多个字符串

来自分类Dev

在Python列表中查找并替换为多个字符串值

来自分类Dev

查找包含多个字符串的文件

来自分类Dev

PostgreSQL中的多个字符串替换

来自分类Dev

替换python中的多个字符串

来自分类Dev

在python3中的文件中替换多个字符串

来自分类Dev

在多个文件中搜索多个字符串

来自分类Dev

如何复制行并替换ONE Tab分隔文件中的多个字符串

来自分类Dev

替换> 2GB文本文件中的6000多个字符串

来自分类Dev

如何用文本文件中的shell脚本替换多个字符串

来自分类Dev

bash和sed:用for循环替换变量中的多个字符串

来自分类Dev

删除文件中的多个字符串/字符

来自分类Dev

删除文件中的多个字符串/字符

来自分类Dev

在文件的多行中查找多个字符串,并使用bash / perl处理输出

来自分类Dev

如何在文件中查找多个字符串?

来自分类Dev

使用 grep 在文件中查找多个字符串

来自分类Dev

Windows命令行-替换单个字符串中的多个字符

来自分类Dev

将文件中特定位置的单个字符串替换为多个新字符串

Related 相关文章

  1. 1

    在XML文件中查找和替换多个字符串

  2. 2

    替换多个文件中的多个字符串

  3. 3

    Excel宏可在任何文本文件中查找和替换多个字符串

  4. 4

    Excel宏可在任何文本文件中查找和替换多个字符串

  5. 5

    使用 CSV 文件中的键->值对替换 XML 中的多个字符串

  6. 6

    Python:将多个字符串替换为文件中的多个字符串

  7. 7

    使用Visual Studio IDE搜索多个字符串查找和替换

  8. 8

    如何使用sed来查找和替换具有多个字符串的模式?

  9. 9

    在多个文件中查找和替换字符串

  10. 10

    如何替换字符串中的多个字符?

  11. 11

    替换字符串中的多个字符

  12. 12

    如何使用 PowerShell 替换正确替换给定文件中的多个字符串

  13. 13

    在Python列表中查找并替换为多个字符串值

  14. 14

    查找包含多个字符串的文件

  15. 15

    PostgreSQL中的多个字符串替换

  16. 16

    替换python中的多个字符串

  17. 17

    在python3中的文件中替换多个字符串

  18. 18

    在多个文件中搜索多个字符串

  19. 19

    如何复制行并替换ONE Tab分隔文件中的多个字符串

  20. 20

    替换> 2GB文本文件中的6000多个字符串

  21. 21

    如何用文本文件中的shell脚本替换多个字符串

  22. 22

    bash和sed:用for循环替换变量中的多个字符串

  23. 23

    删除文件中的多个字符串/字符

  24. 24

    删除文件中的多个字符串/字符

  25. 25

    在文件的多行中查找多个字符串,并使用bash / perl处理输出

  26. 26

    如何在文件中查找多个字符串?

  27. 27

    使用 grep 在文件中查找多个字符串

  28. 28

    Windows命令行-替换单个字符串中的多个字符

  29. 29

    将文件中特定位置的单个字符串替换为多个新字符串

热门标签

归档