我正在编写一个简单的PowerShell脚本来处理mkvinfo的输出。它捕获mkvinfo的输出,存储在变量$ s中,并在$ s上进行一些后处理。奇怪的是,当$ s有内容时,我无法从中提取子字符串。
我收到的错误消息是:
使用“1”参数调用“Substring”的异常:“startIndex不能大于字符串的长度。 参数名称:startIndex“
这是一个示例代码:
$filePath = $folder + $file.name
$mkvinfoExe = "C:\mkvinfo.exe"
$s = & $mkvinfoExe $filePath
$s | out-host
$s.Substring($s.Length-1) | out-host
答案 0 :(得分:3)
您确定$s
是字符串而不是数组吗?如果是数组,$s.Length
将是数组中元素的数量,您可能会得到错误。
例如:
PS > $str = @("this", "is", "a")
PS > $str.SubString($str.Length - 1)
Exception calling "Substring" with "1" argument(s): "startIndex cannot be larger than length of string.
Parameter name: startIndex"
At line:1 char:1
+ $str.SubString($str.Length - 1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
答案 1 :(得分:1)
刚发现因为mkvinfo输出多行,$ s实际上是一个String数组(或List?)。切换到$ s [0] .Substring($ s [0] .Length-1)解决它。