3
  1. 我一直在寻找一个小时没有运气
  2. 我的老板希望它是一个批处理文件

我有一个包含以下内容的 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

现在如何更改值?

4

1 回答 1

4

你可以使用我写的脚本:

@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文件中,最后替换原始文件。

于 2012-06-21T06:51:51.560 回答