如何在 powershell 中 return 具有相同扩展名但包含特定名称结尾的文件?

How to return files in powershell with the same extension, but containing a specific end to the name?

项目文件夹中有多个.webp 文件。有些 .webps 是原始图片,有些用作缩略图(它们的大小不同)。使用的命名约定是:原始文件仅称为 NAME.webp,缩略图为 NAME-thumb.webp。我正在尝试创建一个 Powershell 脚本,该脚本 return 根据原始文件的创建日期包含所有 -thumb.webp 文件。因此,如果原始文件是今天创建的,return 对应的 -thumb.webp(除了 -thumb

之外它们具有相同的基本名称

这是我到目前为止尝试过的方法,但仍有问题:

$webps = (Get-ChildItem -Path $dir -Filter '*.webp' -File | Where-Object { $_.CreationTime -gt $refdate }).BaseName
$output = Get-ChildItem -Path $dir -Filter '*.webp' -File | Where-Object { $webps -contains ($_.BaseName + "-thumb") }

Group-Object 可以帮助:

$refDate = (Get-Date).Date # today's calendar day, for instance.

Get-ChildItem -File -Path $dir -Filter *.webp |
  Group-Object { $_.BaseName -replace '-thumb$' } | # by base name without suffix
    ForEach-Object {
      # Test the creation date of the non-thumbnail *.webp file,
      # which comes alphabetically first in the group.
      if ($_.Group[0].CreationTime -gt $refDate) {
        $_.Group[1] # Output the corresponding *-thumb.webp file
      }
    }
  • -replace '-thumb$' 使用 从文件基本名称中删除 -thumb 后缀,以便 <name>.webp<name>-thumb.webp具有相同 <name> 的文件被组合在一起。

  • 上面假设每个 <name>.webp 文件都有一个 <name>-thumb.webp 副本,在这种情况下每个 $_.Group 数组包含两个 System.IO.FileInfo 实例,其中第一个总是代表 <name>.webp,第二个代表 <name>-thumb.webp 文件,因为 Compare-Object 按分组 criterion/a.

    对组成员进行排序
Get-ChildItem $dir\*.webp -Exclude *-thumb.webp -File | 
    Where-Object CreationTime -gt $refdate | 
    ForEach-Object { $_.Fullname -replace '\.webp$', '-thumb.webp' }

首先我们得到所有 *.webp 文件,不包括 *-thumb.webp 文件。使用 Where-Object 我们 select 只有 CreationTime 大于 $refdate 的文件。最后,我们将 .webp 替换为 -thumb.webp 至 return 缩略图文件的完整路径。

如果您只需要文件名,请将 $_.Fullname 替换为 $_.Name