generated through ChatGPT.. mel solutions seemed broken.
This will make a popup window, you put in your desired string and the one you want to put it in front of. Whatever you have selected gets processed
# =======================================================
# Maya Python Script
# Insert String BEFORE Another String
# on Multiple Selected Transform Nodes
# =======================================================
import maya.cmds as cmds
# -------------------------------------------------------
# Rename Logic
# -------------------------------------------------------
def insert_before_rename_execute(*args):
# Get selected transforms
sel = cmds.ls(selection=True, type="transform")
if not sel:
cmds.warning("Please select one or more transform nodes.")
return
# Get UI values
insert_str = cmds.textField(
"insertStringField",
q=True,
text=True
)
before_str = cmds.textField(
"beforeStringField",
q=True,
text=True
)
# Validation
if not before_str:
cmds.warning("Please enter a target string.")
return
renamed_count = 0
# Process all selected objects
for obj in sel:
# Skip objects that don't contain target string
if before_str not in obj:
print(
'Skipped "{}" (target string not found)'.format(obj)
)
continue
# Find insertion point
index = obj.find(before_str)
# Build new name
new_name = (
obj[:index] +
insert_str +
obj[index:]
)
# Rename object
renamed = cmds.rename(obj, new_name)
print(
'Renamed: {} -> {}'.format(obj, renamed)
)
renamed_count += 1
print(
"\nFinished. {} object(s) renamed.\n".format(
renamed_count
)
)
# -------------------------------------------------------
# UI
# -------------------------------------------------------
def insert_before_tool_ui():
window_name = "insertBeforeToolWin"
# Delete existing window
if cmds.window(window_name, exists=True):
cmds.deleteUI(window_name)
# Create window
cmds.window(
window_name,
title="Insert String Before",
widthHeight=(400, 180)
)
cmds.columnLayout(
adjustableColumn=True,
rowSpacing=10
)
cmds.text(
label="Rename Selected Transform Nodes"
)
cmds.separator(style="in")
# Insert string
cmds.text(
label="String To Insert:",
align="left"
)
cmds.textField("insertStringField")
# Before string
cmds.text(
label="Insert BEFORE This String:",
align="left"
)
cmds.textField("beforeStringField")
cmds.separator(style="in")
# Execute button
cmds.button(
label="Rename Selected Objects",
height=40,
command=insert_before_rename_execute
)
cmds.showWindow(window_name)
# -------------------------------------------------------
# Launch
# -------------------------------------------------------
insert_before_tool_ui()