gpt4 book ai didi

regex - 使用 Powershell 将第二次出现的 "-"替换为 "_"

转载 作者:行者123 更新时间:2023-12-02 06:47:51 24 4
gpt4 key购买 nike

我一直在使用 Powershell 来简化创建目录、重命名和移动文件等重复性任务。我正在处理视频和 PDF 文件,其中所需的文件名语法非常具体。到目前为止,我已经能够纠正我遇到的所有常见错误,但这个错误让我感到难过。

我的文件的正确语法包括:

01A-50_02A-50-CIPP-PRE.MP4
01AA-50_02AA-50-CIPP-PNSL.PDF
W01AA-48_02AA-48-CIPP-PST-CMP.MPG

我收到了大量如下所示的文件:

01A-50-02A-50-CIPP-PRE.MP4
01AA-50-02AA-50-CIPP-PNSL.PDF
W01AA-48-02AA-48-CIPP-PST-CMP.MPG

我需要用下划线替换第二个破折号,同时保持其他破折号不受影响。否则我可以在 excel 的帮助下批量执行此操作,但我希望有一个简短的代码可以找到并更正此语法错误,而不必将列表导出到 excel,将文本用于列,然后连接字母数字部分回到一起。我也不想手动更正所有这些文件名。

根据我的研究,不可能针对特定字符的出现进行替换。我最接近的想法是我找到了一个涉及 REGEX 以及识别和替换模式的解决方案。我没能对此做任何有建设性的事情。

我使用此代码的方式是打开包含错误命名文件的文件夹,在那里打开一个 Powershell 窗口,从我桌面上的一个 txt 文件中复制代码,然后将其粘贴到 Powershell 中。

如有任何帮助,我们将不胜感激。

最佳答案

在正则表达式中使用 -replace 运算符:

Get-ChildItem |
Rename-Item -NewName { $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' } -WhatIf

-WhatIf 预览重命名操作;删除它以执行实际的重命名。

  • Regex '^([^_-]+-[^_-]+)-' 在开头捕获前两个 - 分隔的标记(^) 的文件名,使用捕获组 ((...)) 捕获除第二个 - 之外的标记。

    • [^_-]+ 捕获既不是 - 也不是 _ 的任何非空字符。 _ 也被排除,以防止误报已经正确的文件名;对于那些,不排除 _ 会匹配前 3 标记并在其中插入一个附加 _。<
  • 替换操作数 $1_ 然后使用第一个(也是唯一一个)捕获组 ($1) 的值,后跟文字 _ 替换正则表达式匹配的内容,这有效地将第二个 - 替换为 _

  • 如果给定的文件名与正则表达式不匹配(如果它已经是正确的),该名称将按原样返回,这在 Rename-Item 的上下文中是一个安静的空操作.

关于regex - 使用 Powershell 将第二次出现的 "-"替换为 "_",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53328793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com