1

我正在尝试使用 CSV 批量上传列表,但是图像 url 在列中。

我使用 Amazon S3 来托管图像并使用 PowerShell 来检索每个文件的密钥。但是我不确定如何按相关文件进行分组,然后使用文本到列进行拆分?

这些文件具有一致的命名结构:

C2-123-1.JPG
C2-123-2.JPG
C2-123-3.JPG
C3-333-1.JPG
C3-333-2.JPG

在上面的示例中,C2-123 有三张照片,C2-333 只有两张,所以我希望收到如下所示的结果。

|图片链接1| 图片链接 2| 图片链接 3| 图片链接 4|
|C2-123-1.JPG| C2-123-2.JPG| C2-123-3.JPG| |
|C3-333-1.JPG| C3-333-2.JPG| | |
4

1 回答 1

1

这应该有效,您应该替换$data从 AWS 获得的输出。

  • 用于$data测试:
$data = @'
C2-123-1.JPG
C2-123-2.JPG
C2-123-3.JPG
C3-333-1.JPG
C3-333-2.JPG
C3-333-4.JPG
C3-333-999.JPG
C3-456-2.JPG
C3-111-2.JPG
C3-999-4.JPG
'@ -split '\r?\n'
  • 首先,按最后一个-.jpg扩展名之间的数字分组:
Count Name    Group
----- ----    -----
    2 1       {C2-123-1.JPG, C3-333-1.JPG}
    4 2       {C2-123-2.JPG, C3-333-2.JPG, C3-456-2.JPG, C3-111-2.JPG}
    1 3       {C2-123-3.JPG}
    2 4       {C3-333-4.JPG, C3-999-4.JPG}
    1 999     {C3-333-999.JPG}
  • 然后得到Group数组的最大元素个数
  • 最后,使用while循环$max作为对 cast 的引用[pscustomobject]
# Group the files
$groups = $data | Group-Object {

    [regex]::Match(
        $_,
        '(?i)(?<=\d-)(?<imagenum>\d+)\.jpg$'
    ).Groups['imagenum'].Value

}

# Determine max number of elements
$max = $groups.Count | Measure-Object -Maximum
$index = 0

# Construct the object
$result = while($max.Maximum--)
{
    $out = [ordered]@{}
    $groups.ForEach({
        $key = 'Image Link {0}' -f $_.Name
        $out[$key] = $_.Group[$index]
    })

    [pscustomobject]$out
    $index++
}

结果将是:

PS /> $result | Format-Table


Image Link 1 Image Link 2 Image Link 3 Image Link 4 Image Link 999
------------ ------------ ------------ ------------ --------------
C2-123-1.JPG C2-123-2.JPG C2-123-3.JPG C3-333-4.JPG C3-333-999.JPG
C3-333-1.JPG C3-333-2.JPG              C3-999-4.JPG 
             C3-456-2.JPG                           
             C3-111-2.JPG    

要查看regex说明,您可以使用https://regex101.com/r/kARr39/1

于 2021-12-09T02:07:36.387 回答