【发布时间】:2014-02-10 12:23:49
【问题描述】:
在向前一步和向后两步的几天之后,我仍在尝试获取一个命令的输出并将各种值分配回变量。在 PS 提示符下,我可以创建一个 XML 文件,然后成功解析出数据:
MediaInfo.exe --output=XML <path-to-file> >> .\info_out.xml
$xml = [xml](Get-Content .\info_out.xml)
$xml.Mediainfo.File.track[1]
$xml.Mediainfo.File.track[1].Duration --> 5mn 0s
$xml.Mediainfo.File.track[1].Format --> MPEG Video
$xml.Mediainfo.File.track[1].Format_profile --> 4:2:2@High
现在我的问题是尝试使用 IEX 或 & 调用 MediaInfo --output=XML 开关时。 我宁愿不必每次都将 XML 写入文件,并且最好使用 xml 函数,而不必每次都写入/读取/清理 XML 文件。
这是我所做的一个例子:
## Gather file info with MediaInfo (CLI) as XML
$tool = "C:\Program` Files\MediaInfoCLI\MediaInfo.exe"
$xmlswitch = "--Output=XML"
$Args = @("$tool", "$xmlswitch", "$filename" )
write-host "`n .............Testing.............. `n"
Write-Host "Executable: $tool"
Write-Host "XML switch: $xmlswitch"
Write-Host "Filename: $filename"
Write-Host "Args: $Args `n `n"
$test = IEX $tool $xmlswitch $filename
write-host $test
$test2 = IEX $Args
write-host $test2
exit 0
$test 给出:
Invoke-Expression:找不到接受参数“-->Output=XML”的位置参数。 在 C:\Program Files\GXFunpack\bin\mediainfo.v02.ps1:52 char:12 + $test = IEX
$test2 给出:
Invoke-Expression:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。 在 C:\Program Files\GXFunpack\bin\mediainfo.v02.ps1:54 char:13 + $test2 = IEX
我尝试了很多语法变化和偏差:
- $tool = "C:\Program Files\MediaInfoCLI\MediaInfo.exe"
- $tool = C:\"Program Files"\MediaInfoCLI\MediaInfo.exe
- IEX "$tool $xmlswitch $filename"
- "`-`-output=XML"
- 还有很多很多...
但每次它都会吐出下一个神秘错误。
谁能告诉我我的方式的错误吗?
【问题讨论】:
-
第一个失败是因为你在它想要一个的时候传入了三个字符串。第二个失败,因为您在需要一个字符串时传递了 1 个数组。当你运行
$test = Invoke-Expression "$tool $xmlswitch $filename"时会发生什么?
标签: xml powershell