使用 Powershell,如何 return 根据是否存在具有不同命名约定的重复文件的文件列表?
Using Powershell, how to return a list of files based on the existence of duplicate files with a different naming convention?
项目文件夹中有多个.webp 文件。有些 .webps 是原始图片,有些用作缩略图(它们的大小不同)。使用的命名约定是:原始文件名为 NAME.webp,缩略图为 NAME-thumb.webp.
我正在尝试根据相应的 thumb-webp 是否存在来 return 所有 .webp
文件。因此,如果图片 SAMPLE.webp 有一个 SAMPLE-thumb.webp,请不要将此文件添加到列表中。但是如果 SAMPLE.webp 没有相应的 SAMPLE-thumb.webp,那么在列表中执行它。
这是我到目前为止尝试过的方法:
$example = Get-ChildItem -File $dir\*.webp |
Group-Object { $_.BaseName } |
Where-Object { $_.Name -NotContains "-thumb" } |
ForEach-Object Group
您可以执行以下操作:
(Get-ChildItem $dir\*.webp -File |
Group-Object {$_.BaseName -replace '-thumb$'} |
Where Count -eq 1).Group
你一定对分组有共同点。替换 BaseName
属性 中的结尾 -thumb
即可创建。如果没有 filename
和 filename-thumb
,则结果 GroupInfo
的计数值为 1
。
使用语法 ().Group
returns 所有文件对象。如果你想针对每个文件处理代码,你可以使用 Foreach-Object
代替:
Get-ChildItem $dir\*.webp -File |
Group-Object {$_.BaseName -replace '-thumb$'} |
Where Count -eq 1 | Foreach-Object {
$_.Group
}
无需使用 Where-Object
和测试路径进行分组即可获得此结果。
Get-ChildItem -File $dir\*.webp |
Where-Object {$_.Name -notmatch "-thumb" -and -not(Test-Path ($_.FullName -replace ".webp","-thumb.webp"))}
这应该会为您列出所有没有相应缩略图文件的文件。
项目文件夹中有多个.webp 文件。有些 .webps 是原始图片,有些用作缩略图(它们的大小不同)。使用的命名约定是:原始文件名为 NAME.webp,缩略图为 NAME-thumb.webp.
我正在尝试根据相应的 thumb-webp 是否存在来 return 所有 .webp
文件。因此,如果图片 SAMPLE.webp 有一个 SAMPLE-thumb.webp,请不要将此文件添加到列表中。但是如果 SAMPLE.webp 没有相应的 SAMPLE-thumb.webp,那么在列表中执行它。
这是我到目前为止尝试过的方法:
$example = Get-ChildItem -File $dir\*.webp |
Group-Object { $_.BaseName } |
Where-Object { $_.Name -NotContains "-thumb" } |
ForEach-Object Group
您可以执行以下操作:
(Get-ChildItem $dir\*.webp -File |
Group-Object {$_.BaseName -replace '-thumb$'} |
Where Count -eq 1).Group
你一定对分组有共同点。替换 BaseName
属性 中的结尾 -thumb
即可创建。如果没有 filename
和 filename-thumb
,则结果 GroupInfo
的计数值为 1
。
使用语法 ().Group
returns 所有文件对象。如果你想针对每个文件处理代码,你可以使用 Foreach-Object
代替:
Get-ChildItem $dir\*.webp -File |
Group-Object {$_.BaseName -replace '-thumb$'} |
Where Count -eq 1 | Foreach-Object {
$_.Group
}
无需使用 Where-Object
和测试路径进行分组即可获得此结果。
Get-ChildItem -File $dir\*.webp |
Where-Object {$_.Name -notmatch "-thumb" -and -not(Test-Path ($_.FullName -replace ".webp","-thumb.webp"))}
这应该会为您列出所有没有相应缩略图文件的文件。