简体   繁体   English

批处理脚本文件以提取XML标签数据

[英]Batch Script File to Extract XML Tag Data

Need help extracting Data from xml and passing it to Batch File Variables... 需要帮助从xml提取数据并将其传递给批处理文件变量...

i cant seem to get the data needed and be able to pass it to batch variable. 我似乎无法获取所需的数据并将其传递给批处理变量。

i need to extract "AH0417" from the TAGID.... Catch 22- this file changes the TAGID / PHASEID / BOXID 我需要从TAGID中提取“ AH0417”。...捕获22-此文件更改了TAGID / PHASEID / BOXID

so they are rarely the same... i can extract one specific file if i change delims to 因此它们很少相同...如果我将delims更改为,我可以提取一个特定文件

for /f "tokens=7,18-21* delims=^<![CDT[^>]] " %%a in ('find /I /N "<PHASEID>"^<Config.xml') do (
set a=%%a
)
echo %a%

thats where i am now with all the different methods of delims and or tokens, if i use skip=3 it causes unexpected ] 多数民众赞成在我现在使用的所有不同的方法和令牌的方法,如果我使用skip = 3,它将导致意外的结果]

any help would be outstanding, i've been working this all week and posted online for help, still no replies...i dont know if this is just going to be that difficult or impossible, but i know its possible, i need the right set of eyes looking at this lol. 任何帮助都将是杰出的,我整个星期都在工作,并在网上发布了帮助信息,但仍然没有回复...我不知道这是否会那么困难或不可能,但我知道有可能,我需要正确的眼睛看着这个哈哈。 thanks in advance for any help... 预先感谢您的任何帮助...

    <?xml version="1.0" encoding="UTF-16"?>
-<root>-<CONFIG>-<TAGID>
<![CDATA[AH0417]]>
</TAGID>-<DATETIMESTAMP>
<![CDATA[9/18/2012 4:59:08 PM]]>
</DATETIMESTAMP>-<SYSTYPE>
<![CDATA[PTWS]]>
</SYSTYPE>-<PHASEID>
<![CDATA[WJFKB02229001]]>
</PHASEID>-<BOXID>
<![CDATA[D]]>
</BOXID></CONFIG></root>

i have used many different combinations with tokens and delims but i either get blank %PhaseID% or i get the number "2" as a result instead of actual data. 我已经使用了令牌和delims的许多不同组合,但是我要么得到空白的%PhaseID%,要么得到的结果是数字“ 2”,而不是实际数据。 this is what i am trying to do... 这就是我想要做的...

REM ***************************************(PTLS)********************************************************


    :PTLSsetup
    sET sOURCE=%HOMEDRIVE%\ULLSA\PHASE\PTLS\DATA\XML
    rem Extract XML to Batch

    rem for /f "skip=3  tokens=* delims=[" %%G IN (C:\Ullsa\phase\ptls\data\xml\Config.xml) Do (
    rem Set Serial=%%G
    rem Set PhaseID=%%H
    rem Set BoxID=%%I
    rem )

    rem echo %serial%
    rem echo %PhaseID%
    rem echo %BoxID%

this is the full script..... 这是完整的脚本.....

mode con:cols=70 lines=25
rem Created by (ROBERT)
color 0c

for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set day=%%b
set today=%day%-%month%-%year%
echo %today%

rem **************************(LOG CREATION)************************************************
md c:\zMigrate\Backup
set currentd=C:\zMigrate\Backup

ping -n 6 127.0.0.1 >nul
CLS
echo.

set D=%date% %time%
set T=%time%
echo ****************************************** >>%currentd%\%today%.TXT
echo %Date% ---------------------^> Log Created on %computername% >>%currentd%\%today%.TXT
echo ****************************************** >>%currentd%\%today%.TXT
echo LOG CREATED IN %currentd%\%today%.TXT
echo LOG CREATED FROM %currentd% >>%currentd%\%today%.TXT
echo ****************************************** >>%currentd%\%today%.TXT
cls

rem ******************************(MENU)****************************************************


:Menu
echo *******************
IF EXIST "C:\ULLSA\PHASE\PTLS" ECHO PTLS IS INSTALLED
IF ERRORLEVEL 1 ECHO PTLS NOT INSTALLED
IF EXIST "C:\ULLSA\PHASE\PTWS" ECHO PTWS IS INSTALLED
IF ERRORLEVEL 1 ECHO PTWS NOT INSTALLED
echo *******************
IF EXIST "C:\ULLSA\PHASE\PTLS" ECHO %T% PTLS IS INSTALLED >>%currentd%\%today%.TXT
IF ERRORLEVEL 1 ECHO %T% PTLS NOT INSTALLED >>%currentd%\%today%.TXT
IF EXIST "C:\ULLSA\PHASE\PTWS" ECHO %T% PTWS IS INSTALLED >>%currentd%\%today%.TXT
IF ERRORLEVEL 1 ECHO %T% PTWS NOT INSTALLED >>%currentd%\%today%.TXT
echo.
echo.
echo.
echo.
echo.
echo WHAT TYPE WORKSTATION IS THIS?
echo.
echo *NOTE* THIS UTILITY WILL PHASE MIGRATION FILES!!!
echo.
echo.
ECHO 1: PTLS (Phase Team Leader Station)
echo.
ECHO 2: PTWS (Phase Team Workers Station)
echo.
ECHO 0: Leave Program
ECHO.
SET /p choice=Enter a number [0,1,2]:
    if /i [%choice%]==[0] endlocal&goto end
    if [%choice%]==[] goto Menu
    if [%choice%]==[1] goto PTLS
    if [%choice%]==[2] goto PTWS
    ECHO Unrecognized entry. Please try again.
    goto Menu


REM ***************************************(TYPE CHECK)**************************************************


:PTLS
cls
ECHO *************************
echo ***Starting PTLS Check***
ECHO *************************

echo %T% ***Starting PTLS Check*** >>%currentd%\%today%.TXT

PING -n 3 127.0.0.1>nul
CLS
set PTLSDATA="C:\ULLSA\PHASE\PTLS\DATA\XML"
if exist %ptlsdata%\config.xml goto PTLSsetup
if errorlevel 1 goto PTLSFail

:PTLSFAIL
cls
echo ********************************************************
echo **PTLS XML DOES NOT EXIST, ENSURE PTLS IS INSTALLED...**
echo ********************************************************

echo %T% **PTLS XML DOES NOT EXIST, ENSURE PTLS IS INSTALLED...** >>%currentd%\%today%.TXT

ping -n 6 127.0.0.1>nul
goto Menu


:PTWS
cls
ECHO *************************
echo ***Starting PTWS Check***
ECHO *************************

echo %T% ***Starting PTWS Check*** >>%currentd%\%today%.TXT

PING -n 3 127.0.0.1>nul
CLS
set PTWSDATA="C:\ULLSA\PHASE\PTwS\DATA\XML"
if exist %ptwsdata%\config.xml goto PTWSsetup
if errorlevel 1 goto PTWSFail

:PTWSFAIL
cls
echo ********************************************************
echo **PTWS XML DOES NOT EXIST, ENSURE PTWS IS INSTALLED...**
echo ********************************************************

echo %T% PTWS XML DOES NOT EXIST, ENSURE PTWS IS INSTALLED. >>%currentd%\%today%.TXT

ping -n 6 127.0.0.1>nul
goto Menu


REM ***************************************(PTLS)********************************************************


:PTLSsetup
sET sOURCE=%HOMEDRIVE%\ULLSA\PHASE\PTLS\DATA\XML
rem Extract XML to Batch

rem for /f "skip=3  tokens=* delims=[" %%G IN (C:\Ullsa\phase\ptls\data\xml\Config.xml) Do (
rem Set Serial=%%G
rem Set PhaseID=%%H
rem Set BoxID=%%I
rem )

rem echo %serial%
rem echo %PhaseID%
rem echo %BoxID%

echo **********************************
echo ***Setting up PhaseID and BoxID***
echo **********************************

echo %T% ***Setting up PhaseID and BoxID*** >>%currentd%\%today%.TXT

ping -n 4 127.0.0.1>nul
CLS
rem extract xml data to phaseid and boxid
Set PhaseID=PhaseID
Set BoxID=BoxID
set Pbackup=%HOMEDRIVE%\Backup\%PhaseID%
set Bbackup=%HOMEDRIVE%\Backup\%PhaseID%\%BoxID%
Set Backup=%HOMEDRIVE%\Backup\%PhaseID%\%BoxID%
ping -n 4 127.0.0.1>nul
goto PTLSBackup

:PTLSBackup
if exist %backup% goto ptlsxfr
if errorlevel 1 goto ptlsmd

:ptlsmd
MD %backup% >>%currentd%\%today%.TXT
echo %T% Creating Phase Folder >>%currentd%\%today%.TXT
echo %T% Creating Box Folder >>%currentd%\%today%.TXT
echo Creating Destination
ping -n 6 127.0.0.1>nul
if exist %Bbackup% goto ptlsxfr
if errorlevel 1 echo %T% CAN^'T CREATE DESTINATION >>%currentd%\%today%.TXT
ping -n 3 127.0.0.1>nul
CLS
goto menu

:ptlsxfr
echo ****************************
echo ***Created Destination***
echo ****************************

echo %T% ***Created Destination*** >>%currentd%\%today%.TXT

PING -n 3 127.0.0.1>nul
CLS
echo ****************************
echo ***Starting PTLS Transfer***
echo ****************************

echo %T% ***Starting PTLS Transfer*** >>%currentd%\%today%.TXT

ping -n 3 127.0.0.1>nul
CLS
echo.
cacls "%sOURCE%" /T /E >>%currentd%\%today%.TXT
cacls "%backup%" /T /E >>%currentd%\%today%.TXT
CLS
echo Transfering Phase:  %phaseID% Box:  %BoxID%
echo %T% Transfering Phase:  %phaseID% Box:  %BoxID% >>%currentd%\%today%.TXT
xcopy "%sOURCE%\*" "%backup%\" /Y /E /H /V /G >>%currentd%\%today%.TXT
CLS
ECHO Transfer Complete
ECHO %T% Transfer Complete >>%currentd%\%today%.TXT
ping -n 3 127.0.0.1>nul
EXIT


REM ***************************************(PTWS)********************************************************


:PTWSsetup
rem Extract XML to Batch
rem place code or cmd to call to vbs


echo **********************************
echo ***Setting up PhaseID and BoxID***
echo **********************************

echo %T% ***Setting up PhaseID and BoxID*** >>%currentd%\%today%.TXT

ping -n 4 127.0.0.1>nul
CLS
rem extract xml data to phaseid and boxid
Set PhaseID=PhaseID
Set BoxID=BoxID
set Pbackup=%HOMEDRIVE%\Backup\%PhaseID%
set Bbackup=%HOMEDRIVE%\Backup\%PhaseID%\%BoxID%
Set Backup=%HOMEDRIVE%\Backup\%PhaseID%\%BoxID%
sET sOURCE=%HOMEDRIVE%\ULLSA\PHASE\PTWS\DATA\XML
goto PTWSBackup

:PTWSBackup
if exist %backup% goto ptWsxfr >>%currentd%\%today%.TXT
if errorlevel 1 goto ptWsmd >>%currentd%\%today%.TXT

:ptWsmd
MD %backup% >>%currentd%\%today%.TXT
echo %T% Creating Phase Folder >>%currentd%\%today%.TXT
echo %T% Creating Box Folder >>%currentd%\%today%.TXT
echo Creating Destination
ping -n 6 127.0.0.1>nul
if exist %Bbackup% goto ptWsxfr
if errorlevel 1 echo %T% CAN^'T CREATE DESTINATION >>%currentd%\%today%.TXT
ping -n 3 127.0.0.1>nul
goto menu

:ptWsxfr
echo ****************************
echo ***Created Destination***
echo ****************************

echo %T% ***Created Destination*** >>%currentd%\%today%.TXT

PING -n 2 127.0.0.1>nul
cls
echo ****************************
echo ***Starting PTWS Transfer***
echo ****************************

echo %T% ***Starting PTWS Transfer*** >>%currentd%\%today%.TXT

ping -n 3 127.0.0.1>nul
CLS
echo.
cacls "%sOURCE%" /T /E >>%currentd%\%today%.TXT
cacls "%backup%" /T /E >>%currentd%\%today%.TXT
CLS
echo Transfering Phase:  %phaseID% Box:  %BoxID%
echo %T% Transfering Phase:  %phaseID% Box:  %BoxID% >>%currentd%\%today%.TXT
xcopy "%sOURCE%\*" "%backup%\" /Y /E /H /V /G >>%currentd%\%today%.TXT
ECHO Transfer Complete
ECHO %T% Transfer Complete >>%currentd%\%today%.TXT
ping -n 3 127.0.0.1>nul
EXIT

IT's DONE!!!!! 完成!!!!! WENT WITH POWERSHELL IT WAS TOOOOO EASY!!!! 与POWERSHELL一起使用非常容易!!!! had a problem getting the output from Powershell back into batch file variable.... 将Powershell的输出返回到批处理文件变量中时出现问题。

figured it out on the extracting the Powershell Output into Batch File Variable.... 在将Powershell输出提取到批处理文件变量中找到了答案。

i wrote 3 separate PS Scripts so i can use them individually later in other scripts.... 我写了3个单独的PS脚本,因此以后可以在其他脚本中单独使用它们。

PowerShell Script TAG.PS1 PowerShell脚本TAG.PS1

[CODE] [码]

[xml]$config1=get-content .\config.xml

foreach($tagid in $config1.root.config.tagid)

    {

    write-output $tagid.innertext

    }

[/CODE] [/码]

PowerShell Script PHASE.PS1 PowerShell脚本PHASE.PS1

[CODE] [码]

[xml]$config1=get-content .\config.xml

foreach($phaseid in $config1.root.config.phaseid)

    {

    write-output $phaseid.innertext

    }

[/CODE] [/码]

PowerShell Script BOX.PS1 PowerShell脚本BOX.PS1

[CODE] [码]

[xml]$config1=get-content .\config.xml

foreach($Boxid in $config1.root.config.Boxid)

    {

    write-output $Boxid.innertext

    }

[/CODE] [/码]

Windows Batch File *.bat Windows批处理文件* .bat

[CODE] [码]

for /f "tokens=1" %%a in ('powershell.exe .\TAG.ps1') do set tagid=%%a

for /f "tokens=1" %%a in ('powershell.exe .\PHASE.ps1') do set phaseid=%%a

for /f "tokens=1" %%a in ('powershell.exe .\BOX.ps1') do set boxid=%%a

echo %tagid%

echo %phaseid%

echo %boxid%

timeout /t 3 /nobreak



Set Backup=%HOMEDRIVE%\Backup\%tagid%\%PhaseID%\%BoxID%

etc.......... 等等..........

[/CODE] [/码]

OUTPUT AS FOLLOWS: 输出如下:

C:\Users\Administrator>for /F "tokens=1" %a in ('powershell.exe .\TAG.ps1') do set tag=%a

C:\Users\Administrator>set tag=AH0417

C:\Users\Administrator>for /F "tokens=1" %a in ('powershell.exe .\PHASE.ps1') do set phase=%a

C:\Users\Administrator>set phase=WJFKB02229001

C:\Users\Administrator>for /F "tokens=1" %a in ('powershell.exe .\BOX.ps1') do set box=%a

C:\Users\Administrator>set box=A

C:\Users\Administrator>echo AH0417
AH0417

C:\Users\Administrator>echo WJFKB02229001
WJFKB02229001

C:\Users\Administrator>echo A
A

C:\Users\Administrator>pause

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

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