我有以下PowerShell代码
ls "*.zip" | % {
$name = $_.name
if (-not ($name -match '(?<x>\d\d)(?<y>\d{4})\.zip')) { continue }
$p = $matches["y"] + $matches["x"]
}
代码工作以及在ISE。但是,如果它在命令行shell中运行,则会出现以下错误。
Cannot index into a null array. At line:3 char:19 + $p = $matches[ <<<< "y"] + $matches["x"] + CategoryInfo : InvalidOperation: (y:string) [], RuntimeException + FullyQualifiedErrorId : NullArray
编辑
我使用if (-not ...) { continue }
,因为我不想让太多的括号缩进。我纠正了-not()
问题。 (它没有涉及到的错误,虽然,我测试了它的名字总是在xxx999999.zip格局中的文件)
PowerShell *具有*语言规范。在ISE和命令行中,语言的运行方式相同(实际上,主机cmdlet的行为不同)。毕竟这是整个问题。 – Joey 2012-08-03 05:37:39
请注意,您的代码省略了他们犯的实际错误。这是它工作的原因。我会说程序员在这里是不可预知的,而不是语言。 – Joey 2012-08-03 05:40:53
此外,在第一次找到不匹配的文件时继续中止管道。 – JPBlanc 2012-08-03 06:03:56