如何通过 cmd / PowerShell 读取 xml 值
How to read xml value via cmd / PowerShell
我有以下XML格式
如何读取 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?
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
你可以使用 Xidel:
FOR /F "delims=" %%A IN ('xidel.exe -s "C:\path\to\your.xml" -e "pathvalue:=//Tar!@Path" --output-format^=cmd') DO %%A
ECHO %pathvalue%
在同一个 .bat 文件中使用 powershell 咨询 xml
SET ARXIU=c:\catalunya.xml
FOR /F "tokens=* USEBACKQ" %%F IN (`powershell "[xml]$xml = Get-Content %ARXIU% ; $xml.Foo.Tar.Path"`) DO (
SET RUTA=%%F
GOTO HAVE_VALUE
)
echo Error NOT have value
GOTO :EOF
:HAVE_VALUE
echo %RUTA%
我有以下XML格式
如何读取 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?
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
你可以使用 Xidel:
FOR /F "delims=" %%A IN ('xidel.exe -s "C:\path\to\your.xml" -e "pathvalue:=//Tar!@Path" --output-format^=cmd') DO %%A
ECHO %pathvalue%
在同一个 .bat 文件中使用 powershell 咨询 xml
SET ARXIU=c:\catalunya.xml
FOR /F "tokens=* USEBACKQ" %%F IN (`powershell "[xml]$xml = Get-Content %ARXIU% ; $xml.Foo.Tar.Path"`) DO (
SET RUTA=%%F
GOTO HAVE_VALUE
)
echo Error NOT have value
GOTO :EOF
:HAVE_VALUE
echo %RUTA%