如何在 Powershell 中将文件夹中文件名中具有相同六位数字的所有文件分组?

问题描述 投票:0回答:1

我正在尝试编写一个脚本,该脚本查看一个文件夹,然后将文件名中具有相同时间戳的所有文件一起复制到另一个文件夹中,但我已经在努力处理分组部分了。

文件名看起来像这样(分组依据的数字以粗体显示):

mork-work03_lork1360-D-000_20230925_142604_kok.txt
mork-work03_lork1360-D-000_20230925_142604_kok.dat
mork-work03_lork1360-D-000_20230925_142634_kok.exe
mork-work03_lork1360-D-000_20230925_142634_kok.txt
mork-work03_lork1360-D-000_20230925_142634_kok.dat

所以它们应该像这样分组和复制

mork-work03_lork1360-D-000_20230925_142604_kok.exe
mork-work03_lork1360-D-000_20230925_142604_kok.txt
mork-work03_lork1360-D-000_20230925_142604_kok.dat

mork-work03_lork1360-D-000_20230925_142634_kok.exe
mork-work03_lork1360-D-000_20230925_142634_kok.txt
mork-work03_lork1360-D-000_20230925_142634_kok.dat

为此,我尝试使用正则表达式对它们进行分组,但只有当它们包含 6 位数字时,我才能对它们进行分组,而如果它们的名称中有相同的数字,则不能对它们进行分组。我还考虑过在文件名中使用索引,但时间戳不一定总是位于名称中的相同位置。 有人可以帮忙吗?这是我第一次使用ps

$GroupedFiles = Get-ChildItem $SourcePath | Group-Object {($\_ | Get-Item).BaseName -match '\d{6}'}

这是我最新的尝试

powershell grouping
1个回答
0
投票

我会使用文件名中的结构将它们分成几部分,然后将所需的部分重新组合在一起以将它们分组......就像这样:

$GroupedFiles = 
    Get-ChildItem $SourcePath | 
        Group-Object {
            ($_.BaseName -split '_')[2..3] -join '_'
        }
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.