如何使用Windows批处理文件替换web.config XML文件中的版本字符串?

时间:2018-07-10 18:11:09

标签: batch-file

我想编写一个批处理文件,从特定文件夹中提取文件web.config(XML文件)并将版本值更新(替换)为新值。

文件web.config的内容:

<appSettings>
    <add key="abc" value="2"/>
    <add key="Application Name" value="AAAA"/>
    <add key="EntityID" value="2300"/>
    <add key="Version" value="1.38.11"/>
    <add key="AppEnv" value="Dev"/>
</appSettings>

到目前为止我拥有的批处理文件代码:

setlocal EnableDelayedExpansion
set "newValue=1.38.50"
type "Web.config"|repl "(<add key=""Version"").*(/>)" "$1!newValue!$2">fileName.xml.new
move /y "fileName.xml.new" "Web.config"

2 个答案:

答案 0 :(得分:0)

下载由 Dave Benham 编写的JREPL.BAT,这是一个批处理文件/ JScript混合程序,可使用JScript在文件上运行正则表达式替换并将其存储在与以下批处理文件相同的目录中

@echo off
if not exist "%~dp0jrepl.bat" goto :EOF
if not exist "Web.config" goto :EOF

call "%~dp0jrepl.bat" "(<add key=\x22Version\x22 value=\x22)[0-9.]*" "$11.38.50" /F "Web.config" /O -

正则表达式搜索字符串正在搜索区分大小写的搜索字符串<add key="Version" value="之后的0个或多个数字或点,该字符串包含在标记组中,并在替换字符串中用$1进行反向引用只需保留它,然后用新版本字符串1.38.50替换所有找到的版本字符串的数字和点。双引号使用\x22(双引号的十六进制代码值)进行编码,因为"对于Windows命令处理器具有特殊含义,因为它确定命令行参数字符串从何处开始以及参数字符串在何处结束。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • call /?
  • echo /?
  • goto /?
  • if /?
  • jrepl.bat /?

答案 1 :(得分:0)

我写了一个批处理文件来替换文本,它按预期工作。.

但是在我修改的文件中,它也在删除“!”如果有任何注释的代码。这样我的完整xml就会变成无效。

我读取每行并替换文本的命令是

  
    

Market_New.xml echo(!line:%_ search%=%_ replace%!

  

现在,有两种解决方法

1)排除“!”更换时

2)转义字符以避免出现“!”

但是我不确定该怎么做

请告知。