繁体   English   中英

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

[英]Replacing text line in Xml file with string and variable using batch

因此,我面临的挑战如下。

我收到一个看起来像这样的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

我正在考虑重新创建该字段,然后在其中找到并插入它。 但是批处理文件不是我的专业领域。 什么命令可以帮助完成此任务?

这可能对您有用。 这不是非常优雅,因为它使用临时文件存储最终分配给环境变量的值,但是至少批处理文件会在其自身之后清除。 它创建一个“ 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=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM