gpt4 book ai didi

windows - 在 PowerShell 中批量重命名

转载 作者:可可西里 更新时间:2023-11-01 09:32:47 25 4
gpt4 key购买 nike

我正在尝试更新一堆 .jpg 图像,以便它们在我的网站上刷新。它们目前像这样存储在我的电脑上:

media+- random-project|  +- 1.jpg|  +- 2.jpg|  +- 3.jpg|  `- thumb.png+- another-random-project|  +- 1.jpg|  `- thumb.png

I'm trying to batch rename all 1.jpg, 2.jpg etc. to 1a.jpg, 2a.jpg.

I'm thinking using Windows PowerShell and something like

Get-ChildItem -Recurse -Filter "[0-9]+.jpg" | foreach { $_.FullName}

Dir *.jpg | Rename-Item -NewName { $_.Name -replace "[0-9]+.jpg","[0-9]a.jpg" }

但以前从未使用过该程序。你怎么看?

最佳答案

  • 始终值得使用 -Filter参数,如果可用:它在源头执行过滤,因此通常比稍后过滤快得多。

  • -Filter 接受的(字符串)值的语法参数是 cmdlet-/PowerShell 驱动程序特定的
    Get-ChildItem 的情况下(及其内置别名 dir,在 Windows PowerShell 中,ls),它接受单个通配符表达式 - 类似 到,但不同于 PowerShell 自己的 wildcard expressions - 其支持的语法取决于平台:

    • Windows 上,表达式只能包含 *?通配符 - 请参阅 this answer .

    • Unix 平台上的 PowerShell Core 中,表达式还可能包含字符集,例如 [0-9] .

[0-9]+.jpg 作为-Filter工作值,因为它是一个regex(正则表达式)

顺便说一句:您可能打算使用 .作为文字,在这种情况下,您必须在正则表达式中将其转义\. ,因为 .是代表任何 字符的正则表达式元字符。在输入中。

您不能模拟正则表达式 [0-9]+.jpg使用通配符表达式,因为即使 通配符表达式 确实支持 [0-9] 等字符集, 它们 缺少子表达式重复符号(量词),例如 + *? .
(相比之下,通配符元字符 */?独立结构,表示任何可能为空的字符序列/恰好一个字符)。


注:-WhatIf已添加到 Rename-Item调用下面预览进行的任何更改。
删除 -WhatIf执行实际重命名。

[仅限 Unix 上的 PowerShell Core] 如果全部*.jpg感兴趣的文件的基本名称(文件名根目录)仅限于个位数,(例如 1.jpg , ..., 9.jpg ),您可以逃避通过通配符表达式 [0-9].jpg-Filter :

Get-ChildItem -File -Recurse -Filter [0-9].jpg |
Rename-Item -NewName { $_.BaseName + 'a' + $_.Extension } -WhatIf

注意如何传递脚本 block 参数 { $_.BaseName + 'a' + $_.Extension }到参数 -NewName从输入文件的基本名称构造新文件名,后跟文字 a ,后跟输入文件的扩展名。


否则

  • 使用通配符表达式*.jpg用于高效的过滤

  • 然后将预先过滤的结果缩小到特定的基于正则表达式的匹配项 Where-Object使用 -match 的调用将每个输入文件的基本名称与 regex ^[0-9]+$ 进行比较,即测试它是否仅由十进制数字组成。

注意:
* 下面的命令使用 PSv3+ Get-ChildItemWhere-Object语法。
* 正则表达式传递给 -match使用引号 ( '...' ) 而不是双引号 ( "..." ) 来确保 PowerShell 的字符串插值不会妨碍。

Get-ChildItem -File -Recurse -Filter *.jpg |
Where-Object BaseName -match '^[0-9]+$' |
Rename-Item -NewName { $_.BaseName + 'a' + $_.Extension } -WhatIf

关于windows - 在 PowerShell 中批量重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055977/

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