所以我面临的挑战如下:
我收到的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
我正在考虑重新创建该字段并在那里找到并插入它。但批处理文件不是我的专业领域。什么命令有助于完成这项任务?
答案 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=