2015-05-06 36 views
0

我有下面的XML格式如何通过CMD读取XML值/ PowerShell的

我怎么能读的Tar Path

<?xml version="1.0" encoding="utf-8"?> 
<Foo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Bar Path="c:\program files\bar" /> 
    <Tar Path="c:\program files\tar" Include="All" /> 
    <Updates></Updates> 
</Foo> 

值在这个例子中,我需要获得的价值:c:\program files\tar

按照Alex的评论,它也可以在PowerShell脚本中完成。

我需要将这段代码添加到现有的.cmd文件中,是否可以从.cmd调用PowerShell脚本并将结果返回给cmd?

+0

使用其他任何比批处理/ cmd将被建议 –

+0

真的,但不幸的是我需要CMD批次 – user829174

+0

vbscript,jscript,powershell?全部从命令行运行 –

回答

2

PowerShell的解决方案:

[xml]$xml = Get-Content $args[0] 
$xml.Bar.Tar.Path 

VBScript的解决方案:

Set xml = CreateObject("Msxml2.DOMDocument.6.0") 
xml.async = False 
xml.load WScript.Arguments(0) 

If xml.ParseError <> 0 Then 
    WScript.Echo xml.ParseError.Reason 
    WScript.Quit 1 
End If 

Set path = xml.SelectSingleNode("/Tar/Bar[@Path]") 
WScript.Echo path.Value 

调用上述脚本,在批处理文件是这样的:

powershell -File "C:\path\to\your.ps1" "C:\path\to\your.xml" 

或像这样:

cscript //NoLogo "C:\path\to\your.vbs" "C:\path\to\your.xml" 

PowerShell和VBScript都将结果写入STDOUT。要指定这回你需要一个for循环这样一个批处理变量(使用命令之一代替省略号以上):

for /f "tokens=*" %%p in ('...') do set pathvalue=%%p 
+0

我不明白如何将其接收回我的cmd的最后部分。我需要把省略号......? – user829174

+0

@ user829174上述两个命令之一。无论是'powershell -File ...'还是'cscript // NoLogo ...'。 –

0

您可以使用该Xidel

FOR /F "delims=" %%A IN ('xidel.exe -s "C:\path\to\your.xml" -e "pathvalue:=//[email protected]" --output-format^=cmd') DO %%A 
ECHO %pathvalue%