You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量交换多个文件名中的高度与宽度字段?

批量互换文件名中高度与宽度的位置解决方案

我来帮你搞定这个批量重命名的问题!核心思路是用正则表达式精准匹配出文件名里的高度(2/3位数字)和宽度(数字+sp)字段,然后互换它们的位置,同时保留其他内容和分隔符(下划线/空格)。下面分Windows和Linux/macOS两种常用场景给你现成的脚本:

Windows 平台:用PowerShell实现

  1. 打开PowerShell,先导航到你的文件所在目录:
cd "D:\你的文件存放路径"
  1. 执行批量重命名命令(建议先去掉Rename-Item那行,换成Write-Host $newName预览结果,确认无误后再执行重命名):
Get-ChildItem | Where-Object { $_.Name -match '^(.*?)(\d{2,3})([_\s])(\d+sp)(.*)$' } | ForEach-Object {
    $newName = $matches[1] + $matches[4] + $matches[3] + $matches[2] + $matches[5]
    # 先预览:Write-Host "原文件名:$($_.Name) -> 新文件名:$newName"
    Rename-Item -Path $_.FullName -NewName $newName
}

正则匹配逻辑说明:

  • ^(.*?):匹配文件名开头的任意前缀内容(非贪婪模式,防止过度匹配)
  • (\d{2,3}):精准捕获2位或3位数字的高度字段
  • ([_\s]):捕获高度和宽度之间的分隔符(下划线或空格)
  • (\d+sp):捕获带sp后缀的宽度字段
  • (.*)$:匹配文件名剩余的后缀内容

Linux/macOS 平台:用bash脚本实现

  1. 打开终端,导航到目标文件目录:
cd /Users/你的用户名/文件目录
  1. 运行以下批量重命名脚本(同样建议先把mv行换成echo预览结果):
for file in *; do
    if [[ $file =~ ^(.*?)([0-9]{2,3})([_ ])([0-9]+sp)(.*)$ ]]; then
        prefix="${BASH_REMATCH[1]}"
        height="${BASH_REMATCH[2]}"
        separator="${BASH_REMATCH[3]}"
        width="${BASH_REMATCH[4]}"
        suffix="${BASH_REMATCH[5]}"
        new_name="${prefix}${width}${separator}${height}${suffix}"
        # 先预览:echo "$file -> $new_name"
        mv "$file" "$new_name"
    fi
done

关键注意事项:

  • 先备份文件:执行重命名前务必复制一份文件到其他目录,避免意外操作导致文件丢失
  • 测试先行:先用预览命令确认新文件名是否符合预期,再执行实际重命名
  • 适配特殊情况:如果文件名包含括号、特殊符号等,可能需要微调正则表达式,但针对你给出的示例格式,上面的脚本完全适用

内容的提问来源于stack exchange,提问作者Florian Schuster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:53:38