【问题标题】:How to read xml value via cmd / PowerShell如何通过 cmd / PowerShell 读取 xml 值
【发布时间】:2015-07-16 12:04:30
【问题描述】:

我有以下 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?

【问题讨论】:

  • 建议使用除批处理/cmd 以外的任何东西
  • 没错,但不幸的是我需要 cmd 批处理
  • vbscript、jscript、powershell?全部从命令行运行
  • 这个想法是我想从现有的 .cmd 文件运行代码,是否可以从 .cmd 调用 powershell 脚本并将结果返回给我的 cmd?你能分享一个代码示例吗

标签: xml windows powershell cmd


【解决方案1】:

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

【讨论】:

  • 我不明白如何将它接收回我的 cmd 的最后一部分。我需要把省略号放在什么地方...?
  • @user829174 上述两个命令之一。 powershell -File ...cscript //NoLogo ...
【解决方案2】:

您可以为此使用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%

【讨论】:

    【解决方案3】:

    在同一个 .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%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多