【问题标题】:How To Delete Multiple Files After Matching Through REGEX Using CMD/PowerShell In Windows?如何在 Windows 中使用 CMD/PowerShell 通过 REGEX 匹配后删除多个文件?
【发布时间】:2022-11-28 06:48:35
【问题描述】:

我的文件夹中有一个包含子文件夹的文件夹电脑我有多个具有不同尺寸和标准格式名称的图像文件,如下所示。

  • 第一图像名称.jpg
  • first-image-name-72x72.jpg
  • 第一张图片名称 150x150.jpg
  • first-image-name-250x250.jpg
  • first-image-name-300x300.jpg
  • first-image-name-400x400.jpg
  • 第一张图片名称-1024x1024.jpg
  • 第二图像名称.png
  • second-image-name-72x72.png
  • second-image-name-150x150.png
  • second-image-name-250x250.png
  • second-image-name-300x300.png
  • second-image-name-400x400.png
  • second-image-name-1024x1024.png

现在我想删除所有名称中显示的不同大小的图像文件,并且应该只保留原始文件。

为此,我尝试了下面分享的许多查询,但没有一个有效......

Windows PowerShell:

Get-ChildItem $Path | Where{$_.Name -Match '.*[0-9]+x[0-9]+.\(jpg\|png\|jpeg\)$'} | Remove-Item

窗口命令:

find -type f -regex '.*[0-9]+x[0-9]+.\(jpg\|png\|jpeg\)$' -delete

find -name '.*[0-9]+x[0-9]+.\(jpg\|png\|jpeg\)$' -delete

以上都不起作用所以让我知道我做错了什么......???请记住我必须递归使用它,因为我在主文件夹中也有很多文件夹。

【问题讨论】:

  • 您可以在不转义 powershell .*[0-9]x[0-9]+.(jpe?g|png)$ 中分组的括号和交替的管道的情况下尝试它
  • 正确答案。请将其添加到答案中,以便我接受。

标签: regex windows powershell cmd command-line


【解决方案1】:

The fourth bird 在评论中提供了关键指针:

  • 你错误地-<em>逃脱</em>以下元字符</strong>在您的正则表达式中,这会导致它们匹配<em>作为文字</em>:(、)和|。只需省略 即可。
  • 相反,您忽略了将 . 转义为 .,因为您希望按字面意思解释它。

但是,我建议进行以下优化,前置过滤器感兴趣的文件,然后仅匹配每个预过滤文件的根据名称 (.BaseName),即没有扩展名的名称:

Get-ChildItem -Recurse $Path -Include *.jpg, *.jpeg, *.png |
  Where-Object { $_.BaseName -match '-[0-9]+x[0-9]+$' }

笔记:

  • 上面的 regex 不需要 .* 前缀,因为 PowerShell 的 -match 运算符查找子串默认。

    • 使用字符类 d 代替 [0-9] 是一个选项,尽管 d 在技术上也匹配数字其他比 ASCII 范围字符 0 到 9,即 Unicode 标准归类为数字的任何字符。

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多