使用批处理用字符串和变量替换Xml文件中的文本行

时间:2016-06-02 23:38:01

标签: xml string batch-file

所以我面临的挑战如下:

我收到的xml文件如下:

<Person>
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    <MiddleName>x</MiddleName>
    <Credential>
      <Name>John Doe</Name>
      <GUID>xxxxxx </GUID>
      <ExpirationDateTime>5/31/2017 10:59:00 PM</ExpirationDateTime>
      <ObjectID>5051</ObjectID>
    </Credential>
  </Person>

现在我的目标是将到期日期字段更改为当前日期凌晨1点。

这是我到目前为止所拥有的。 我可以摆脱这个领域,我可以用我需要它的格式来回显日期时间。但是我想不出一种方法可以在同一个地方重新插入新的到期日期

@echo off

cd %~dp0
copy Original.xml In.xml

for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%a/%%b/%%c)
set mytime=01:00:00 AM

echo %mydate% %mytime% 

findstr /v "ExpirationDateTime" In.xml>Out.xml

PAUSE

我正在考虑重新创建该字段并在那里找到并插入它。但批处理文件不是我的专业领域。什么命令有助于完成这项任务?

1 个答案:

答案 0 :(得分:0)

这可能适合您。不是超级优雅,因为它使用临时文件来存储最终分配给环境变量的值,但至少批处理文件会自行清理。它创建一个“result.xml”文件作为其输出。 请注意,我必须更改批处理文件中的日期格式,因为我的区域设置与您的区域设置不同,但只需将其重置为您拥有的内容并且它应该可以正常工作。

@Echo off
Setlocal EnableDelayedExpansion
for /f "tokens=1-3 delims=- " %%a in ('date /t') do (set mydate=%%a-%%b-%%c)
set mytime=01:00:00 AM
set isFound=
if exist result.xml del result.xml
for /F "delims=" %%i in (test.xml) do (
  echo "%%i" | find /c "ExpirationDateTime" > tst.tst
  set /p isFound=<tst.tst
  del tst.tst
  if "!isFound!"=="1" (
    echo       ^<ExpirationDateTime^>%mydate% %mytime%^</ExpirationDateTime^> >> result.xml
  ) ELSE (
    echo %%i >> result.xml
  )
)
set isFound=