Regex Powershell正则表达式到拆分文件夹路径(csv文件)

Regex Powershell正则表达式到拆分文件夹路径(csv文件),regex,powershell,Regex,Powershell,我在csv文件中有一个文件夹路径列表,例如 \Customer \Customer\Customer A \Customer\Customer A\Bob \Customer\Customer B \Supplier "\Supplier\Supplier, A, B" 请注意双引号 我需要做的是在最后一个“\”处拆分每一行,这样数据就可以 ,Customer \Customer,Customer A \Customer\Customer A,Bob \Customer,Customer B

我在csv文件中有一个文件夹路径列表,例如

\Customer
\Customer\Customer A
\Customer\Customer A\Bob
\Customer\Customer B
\Supplier
"\Supplier\Supplier, A, B"
请注意双引号

我需要做的是在最后一个“\”处拆分每一行,这样数据就可以

,Customer
\Customer,Customer A
\Customer\Customer A,Bob
\Customer,Customer B
,Supplier
"\Supplier","Supplier, A, B"
请注意双引号


如果可能的话,我希望任何代码都在powershell中。我试着使用记事本+,通过使用
(.*)\\
,它选择最后一个“\”之前的所有内容,但不知道如何将其切换为“,”。这对双引号也没有帮助。

您可以使用
String.LastIndexOf
查找拆分点。假设您只需要一个包含更改的字符串列表,类似这样的操作应该可以:

[String[]] $l = '\Customer',
'\Customer\Customer A',
'\Customer\Customer A\Bob',
'\Customer\Customer B',
'\Supplier',
'"\Supplier\Supplier, A, B"' 

[String[]] $r = @()

foreach ($x in $l)
{
    # work out whether we need to double-quote or not
    if (($x[0] -eq '"') -and ($x[$x.Length - 1] -eq '"'))
    {
        $joiner = '","'
    }
    else
    {
        $joiner = ','
    }

    $i = $x.LastIndexOf('\')
    $s = [String]::Concat($x.Substring(0, $i), $joiner, $x.Substring($i + 1))

    $r = $r + $s
}

$r # contains your output

+1我删除了我的答案,因为我编辑它是为了管理双引号,以生成相同的解决方案。@Aftab请确保$PATH只包含字符串。您的csv文件是什么样子的?我对上面的示例输入有两个问题,我唯一更改的是$path已成为导入csv。\test.csv以下是输出“@{\Customer=\Customer,Customer A}@{\Customer=\Customer A,Bob}{\Customer=\Customer,Customer B}{\Customer=,Supplier}”@{\Customer=\Supplier,Supplier,A,B}“1.\Customer=始终出现在输出的每一行上。2.第一个if语句似乎不起作用,因为Powershell从csv导入时会从路径值中删除双引号,我如何更改该行为。我的csv文件与上面问题中的示例完全相同,这就是我用于测试的。或它是使用Exchange命令行管理程序中的Get-MailboxStatistics创建的原始csv文件,然后我在Excel中打开它以删除第二列,因为我只需要路径。此外,我正在使用Powershell ISE尝试此代码,不确定这是否有什么不同。它没有标题,因此请将$path替换为Get-Content file.csv,然后重试。
$pattern = '\\([^\\]+)$' 

$paths | Foreach-Object {

    if($_ -like '"*"')
    {
        $_ -replace $pattern,'","$1'  
    }
    else
    {
        $_ -replace $pattern,',$1'      
    }

}