2016-06-02 1 views
0

그래서 직면하게되는 과제는 다음과 같습니다.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시에 현재 날짜에 만료 날짜 필드를 변경하는 것입니다

내가 좋아 보이는 xml 파일을받을 수 있습니다.

이것은 내가 지금까지 가지고있는 것입니다. 나는 현장을 제거 할 수 있고 나는 그것을 필요로하는 형식으로 날짜 시간을 에코 할 수 있습니다. 그러나 나는 같은 장소

@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 

I의 새로운 만료 날짜를 다시 삽입하는 방법을 생각할 수 없다 들판을 재창조하고 발견하고 거기에 삽입하는 것에 대해 생각하고있었습니다. 배치 파일은 내 전문 분야가 아닙니다. 이 일을 성취하는 데 도움이되는 명령은 무엇입니까?

+2

가능한 중복 http://stackoverflow.com/questions/32719582/how-do-i-successfully-replace-text-with-batch- in-xml) –

답변

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= 
([I 성공적으로 XML의 배치와 텍스트를 교체하는 방법]의
관련 문제