修改web.config中的元素

时间:2015-06-12 15:36:59

标签: batch-file web-config

每当我在Git中切换分支时,我必须在一个XML文件中更新一行,这样我就可以在本地看到我的图像(从图像服务器中提取)。我不想要永久性的解决方案来更改文件(例如gitignore),因为该文件会不时更改。

我想运行一个只会改变这一行的批处理:

<add key="Images.RootUrl" value="//images.dev.foo.com:7000/" />

<add key="Images.RootUrl" value="//imagesperf.foo.com/" />

我正在尝试实现我在SO上找到的两种方法中的一种,但到目前为止它们都没有我,部分是因为所有的引用。

  1. 创建新文件但不更改行:
  2. cd c:\Projects\Git\foo\Foo.Web.Store FINDSTR /I /V /B "Images.RootUrl" Web.config > config.new ECHO <add key="Images.RootUrl" value="//imagesperf.foo.com/" /> >> config.new REM DEL Web.config REM REN Web.new Web.config PAUSE

    1. 很确定我在中途失去了阴谋:
    2. cd c:\Projects\Git\foo\Foo.Web.Store for %%f in (Web.config) do ( for /f "tokens=1* delims=:" %%g in ('type "%%f" ^| findstr /n /v "images.dev.foo.com:7000"') do ( if "%%hx"=="x" ( echo.>>"tempWeb.config" ) else ( for /f "tokens=1* delims==" %%i in ('echo.%%h') do ( if "%%i"=="images.dev.foo.com:7000" ( echo.%%i=%%jimagesperf.foo.com>>"tempWeb.config" ) else ( if "%%jx"=="x" ( echo.%%i>>"tempWeb.config" ) else ( echo.%%i=%%j>>"tempWeb.config" ) ) ) ) ) ) REM ren Web.config oldWeb.config REM ren tempWeb.config Web.config

2 个答案:

答案 0 :(得分:0)

为您使用的环境创建文件版本,并在每个文件的末尾添加_ENVNAME。设置.gitignore忽略.xml文件。然后,根据需要在每个环境中对.xml文件进行符号链接。

例如:

ln -s some.xml_LOCAL some.xml

在当地:

/some.xml

在.gitignore

   Sub CheckRevision()
      Dim CurCell As Object
      For Each CurCell In ActiveWorkbook.ActiveSheet.Range("A1:AZ500")
         If CurCell.Value = "Revision" Then CurCell.Interior.Color = RGB(0,204,0)
      Next
   End Sub

为安全起见,您可能还想从git中删除some.xml。

最后,将此文件记录给其他人。

答案 1 :(得分:0)

此批处理文件可以执行您想要的操作:

@echo off
setlocal EnableDelayedExpansion

set "replace=<add key="Images.RootUrl" value="//imagesperf.foo.com/" />"

rem Get the number of the target line minus one
for /F "delims=:" %%a in ('findstr /I /N "Images.RootUrl" Web.config') do set /A lines=%%a-1

rem Redirect the input file to read it via SET /P
< Web.config (

   rem Copy lines before the target one
   for /L %%i in (1,1,%lines%) do (
      set "line="
      set /P "line="
      echo/!line!
   )

   rem Read the target line and replace it
   set /P "line="
   echo !replace!

   rem Copy the rest of lines
   findstr "^"

rem Store the output in a temporary file
) > Web.new

move /Y Web.new Web.config

但是,如果替换的行不必与原始行位于同一位置,那么第一种方法应该可行;你只有两个小错误:

FINDSTR /I /V "Images.RootUrl" Web.config > config.new
ECHO ^<add key="Images.RootUrl" value="//imagesperf.foo.com/" /^> >> config.new
REM DEL Web.config
REM REN Web.new Web.config
PAUSE
  • FINDSTR中的/ B开关在行的开头查找字符串!
  • 必须使用<
  • 转义ECHO命令中的>^字符