gpt4 book ai didi

regex - $ matches [“x”]在ISE中有效,但在命令行shell中无效

转载 作者:行者123 更新时间:2023-12-02 23:48:01 24 4
gpt4 key购买 nike

我有以下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的文件)

最佳答案

.zip'后可能缺少第一个 a')'(可能是拼写错误)

第二个只是尝试在您的比赛周围添加()

ls "*.zip" | % { 
$name = $_.name
if (-not ($name -match '(?<x>\d\d)(?<y>\d{4})\.zip$')) { continue }
$p = $matches["y"] + $matches["x"]
}

第三您的 continue避免处理管道末端,您可以尝试
ls "*.zip" | % { 
$name = $_.name;
Write-Host $name;
if ($name -match '(?<x>\d\d)(?<y>\d{4})\.zip$'){
$p = $matches["y"] + $matches["x"]
}
}

它也在Powershell命令行中工作
ls "*.zip" | % {$name = $_.name; if ($name -match '(?<x>\d\d)(?<y>\d{4})\.zip$') { $p = $matches["y"] + $matches["x"]}}

关于regex - $ matches [“x”]在ISE中有效,但在命令行shell中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com