用批处理更新xml文件

  1. 我一直在寻找一个小时,没有运气
  2. 我的老板希望它是一个batch file

我有一个包含以下的XML文件

<?xml version="1.0"?> <profiledoc default="*** Last Run ***"> <profile name="*** Last Run ***" > <workingdir>c:\proj</workingdir> <somestuff>none</somestuff> <smpnumprocs>4</smpnumprocs> <otherstuff></otherstuff> <llama>FLUFFY</llama> <language>en-us</language> <customexe></customexe> <addlparams></addlparams> <graphicsdevice>win32</graphicsdevice> </profile> </profiledoc> 

我们要设置<smpnumprocs>4</smpnumprocs> (这是所使用的处理器的数量)为2,因此,该行应该看起来像这样<smpnumprocs>2</smpnumprocs>

我想出了如何达到我想要的价值

 FOR /f "tokens=3 delims=>< " %%a IN ('TYPE %LOCAL_FILE% ^| FIND "<smpnumprocs>"') DO SET NUM_PROCS=%%a 

现在我该如何改变价值?

你可以使用我写的脚本:

 @echo OFF @setlocal ENABLEDELAYEDEXPANSION if "%~1" == "" ( echo Please provide xml file path as a first parameter. exit /B 1 ) if not exist "%~1" ( echo Xml file with given path does not exist. exit /B 2 ) if exist "%~1.tmp" del /F /Q "%~1.tmp" for /F "delims=" %%G in (%~1) do ( set LINE=%%G if not "!LINE!" == "!LINE:smpnumprocs=!" ( set LINE=!LINE:4=2! ) >> "%~1.tmp" echo !LINE! ) del /F /Q "%~1" ren "%~1.tmp" "%~1" @endlocal 

脚本通过给定的xml文件进行扫描,并在其中找到带有smpnumprocs行。 如果找到这种类型的线,它会替代4到2。

所有行都转储到<xmlFilePathHere>.tmp文件,该文件将在最后替换原始文件。