1

我正在编写一个简单的 PowerShell 脚本来处理 mkvinfo 的输出。它捕获 mkvinfo 的输出,存储在变量 $s 中并对 $s 进行一些后处理。奇怪的是,虽然 $s 有内容,但我无法从中提取子字符串。

我收到的错误消息是:

使用“1”参数调用“子字符串”的异常:“startIndex 不能大于字符串的长度。参数名称:startIndex”

这是一个示例代码:

$filePath = $folder + $file.name
$mkvinfoExe = "C:\mkvinfo.exe"
$s = & $mkvinfoExe $filePath
$s | out-host
$s.Substring($s.Length-1) | out-host
4

2 回答 2

4

你确定$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
于 2012-11-10T10:40:38.777 回答
1

刚刚发现是因为mkvinfo输出多行,$s其实是一个String数组(或者List?)。切换到 $s[0].Substring($s[0].Length-1) 可以解决它。

于 2012-11-10T10:40:46.050 回答