maya 自带的命名工具只能替换字符或者添加前缀,对象一多命名起来就很麻烦


想只添加之一?不输入不就没有
import maya.cmds as cmds
def batch_rename_objects():
""" 批量重命名所选对象,添加前缀或后缀 """
# 获取当前选择
selected_objects = cmds.ls(selection=True)
if not selected_objects:
cmds.warning(" 请先选择要重命名的对象!")
return
# 从 UI 获取输入
prefix = cmds.textField("prefixField", query=True, text=True)
suffix = cmds.textField("suffixField", query=True, text=True)
if not prefix and not suffix:
cmds.warning(" 请输入前缀或后缀!")
return
# 批量重命名
for obj in selected_objects:
# 提取原始名称(不含命名空间)
base_name = obj.split("|")[-1].split(":")[-1]
# 构建新名称
new_name = f"{prefix}{base_name}{suffix}"
try:
# 重命名对象
cmds.rename(obj, new_name)
except Exception as e:
print(f" 重命名失败: {obj} -> {e}")
def create_rename_ui():
""" 创建重命名 UI 窗口 """
window_name = "batchRenameWindow"
# 如果窗口已存在则删除
if cmds.window(window_name, exists=True):
cmds.deleteUI(window_name)
# 创建窗口
cmds.window(window_name, title=" 批量重命名工具 ", width=300)
cmds.columnLayout(adjustableColumn=True)
# UI 标题
cmds.separator(height=10)
cmds.text(" 批量添加前缀 / 后缀 ", align="center", font="boldLabelFont")
cmds.separator(height=15)
# 前缀输入框
cmds.rowLayout(numberOfColumns=2, columnWidth2=(80, 200))
cmds.text(" 前缀 :", align="right")
prefix_field = cmds.textField("prefixField", placeholderText=" 输入前缀 ...")
cmds.setParent("..")
cmds.separator(height=10)
# 后缀输入框
cmds.rowLayout(numberOfColumns=2, columnWidth2=(80, 200))
cmds.text(" 后缀 :", align="right")
suffix_field = cmds.textField("suffixField", placeholderText=" 输入后缀 ...")
cmds.setParent("..")
cmds.separator(height=20)
# 按钮区域
cmds.rowLayout(numberOfColumns=3, columnAttach=(1, "both", 0))
cmds.button(label=" 添加前缀 ", command=lambda _: batch_rename_objects())
cmds.button(label=" 添加后缀 ", command=lambda _: batch_rename_objects())
cmds.button(label=" 添加两者 ", command=lambda _: batch_rename_objects())
cmds.setParent("..")
cmds.separator(height=10)
# 提示信息
cmds.text(" 注意: 仅对选中对象有效 ", align="center", font="smallPlainLabelFont")
# 显示窗口
cmds.showWindow(window_name)
# 执行创建 UI 的函数
create_rename_ui()