这是交易,我正在浏览带有一些代码的INI文件。我们的想法是使用正则表达式返回INI文件中找到的所有类别,然后将arraylist =设置为结果。
所以这是代码:
switch -regex -file $Path
{
"^\[(.+)\]$" {
$arraylist.Add($matches[1])
}
}
但是,该函数不仅返回类别,还返回类别的计数。例如,如果INI文件如下所示:
[Red]
[White]
[Blue]
输出结果为:
0
1
2
Red
White
Blue
我该如何解决这个问题?
答案 0 :(得分:3)
ArrayList.Add()返回添加项目的索引。这就是你看到数字的原因。只是将该陈述转为无效,例如:
[void]$arraylist.Add($matches[1])
或管道到Out-Null
$arraylist.Add($matches[1]) | Out-Null
答案 1 :(得分:1)
另一种选择:
$al = new-object System.Collections.ArrayList
$cat = switch -regex -file $env:WINDIR\system.ini { "^\[([^\]]+)\]$" { $_ -replace '\[|\]'}}
$al.AddRange($cat)
答案 2 :(得分:0)
我正在尝试重现你所看到但却无法解决的问题。这是我用来测试的代码的重新创建:
("[Red]","[White]","[Blue]") | Out-File Test.ini -Encoding ASCII
$Path = (get-item Test.ini)
$arraylist = new-object System.Collections.ArrayList
$matches = @()
switch -regex -file $Path {
"^\[(.+)\]$" {
$arraylist.Add($matches[1])
}
}
$arrayList
执行此操作时,我得到以下输出:
Red
White
Blue
我是否遗漏了您的代码未显示的内容?