Powershell:将字符串的内容与中间的点组合起来,忽略空的

Powershell: combine contents of strings with dots inbetween, ignore empty ones

我们的命名约定由名字、插入和姓氏组成,全部由点分隔。一个例子:

这些输出稍后将在脚本中用于创建邮箱、用户帐户等。

我已经通过简单地将所有字符串的值加在一起成功地组合了它们,如下所示:

$Convention = $Firstname+"."+$Insertion+"."+$LastName

这些字符串的值来自 stript 运行时输入的信息(Read-Host "....")

现在,我正在努力使它更具动态性。当然,并不是每个人的名字中都有插入符号。使用给定的示例,$Convention 的当前输出将是“Stack..Overflow”,而不是“Stack.Overflow”。

我的问题是:当 $Insertion 为空时,如何过滤掉额外的点 $Insertion ?这很可能是一些非常简单的东西,但我似乎无法弄清楚它是什么。

在此先感谢您提供的帮助!

氪, 罗伯特

下面的代码将遍历每个 $convention 数组,如果这是一个数组,并测试插入是否为空。如果 $Insertion 变量为空,$i 将删除 $Insertion 变量和额外的 .。在创建邮箱之前,您需要将其作为测试添加到脚本中。

foreach ($i in $convention){
    if($insertion -eq "" -or $insertion -eq $null) {
        $i= $Firstname+"."+$LastName
    } else {
        continue
    }
}

我愿意

$Convention = ('{0}.{1}.{2}' -f $Firstname, $Insertion, $LastName) -replace '\.+', '.'

-replace在第一个参数中使用正则表达式,所以'\.+', '.'表示用单个点替换1个或多个连续的点

或者您可以使用正则表达式 \.{2,} 读取 两个或多个连续的点

示例:

$Firstname  = 'Robbert'
$Insertion  = ''
$LastName   = 'Verwaart'
$Convention = ('{0}.{1}.{2}' -f $Firstname, $Insertion, $LastName) -replace '\.+', '.'

输出:

Robbert.Verwaart