0

我有一个 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 中。我尝试通过 using 使用 notepad++ (.*)\\,它选择所有内容,包括最后一个“\”,但不知道如何将其切换为“,”。这对双引号也没有帮助。

4

2 回答 2

1
$pattern = '\\([^\\]+)$' 

$paths | Foreach-Object {

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

}
于 2013-06-12T13:32:50.923 回答
0

您可以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
于 2013-06-12T12:36:11.837 回答