Ya'll should keep in mind it's possible the OP isn't indicating the full requirements of this thread's request: when binding xrefs all table entries (e.g. layers, text styles yada) inherit the *$0$* sh!t. Subtitle: the intelligent stripping / merging may have to be performed on more than just layers. I may be wrong, on the other hand, I may be wrong.
This One worked Fine:
(vl-load-com)
(defun c:LayerClean (/ layers lo name badlayers name1 pos)
(setvar "CLAYER" "0")
(setq layers (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))))
(vlax-for lo layers
(setq name (vla-get-Name lo))
(cond
((and (vl-string-search "$" name) (not (vl-string-search "|" name)))
(setq badlayers (cons name badlayers))
)
)
)
(foreach name badlayers
(setq name1 name
lo (vla-Item layers name)
)
(while (setq pos (vl-string-search "$" name1))
(setq name1 (substr name1 (+ pos 2)))
)
(cond
((tblsearch "LAYER" name1)
(command "-LAYMRG" "_Name" name "" "_Name" name1 "_Yes")
)
(t
(vla-put-Name lo name1)
)
)
)
(princ)
)
Can someone edit this to include also blocks renaming.
Layers all OK now even those in Blocks. But blocks names are still with 4176-x_(something)$0$(real block name).