1

mkvinfo の出力を処理する単純な PowerShell スクリプトを作成しています。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
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 は実際には文字列配列 (またはリスト?) であることがわかりました。$s[0].Substring($s[0].Length-1) に切り替えると解決します。

于 2012-11-10T10:40:46.050 に答える