If I understand you correctly you want to change all entities on selected layers from color, linetype, etc. = ByLayer to the layer's setting. Then use LayMrg to place them all on a new layer. Is so try this:
Code:
;; Layer Merge but keep color & linetype settings
(defun c:LayMrg2 (/ en ed ln llst ld)
(while (progn
(initget "Name")
(setq en (entsel "\nSelect object on layer to merge or [Name]: "))
) ;_ end of progn
(if (and (= en "Name") (setq en (getstring t "Enter Layer Name: ")))
(if (setq ln (tblobjname "LAYER" en))
(if (not (member en llst))
(setq llst (cons en llst))
) ;_ end of if
(princ "Layer does not exist.")
) ;_ end of if
(progn
(princ "\n")
(if (setq ed (entget (car en)))
(if (not (member (cdr (assoc 8 ed)) llst))
(setq llst (cons (cdr (assoc 8 ed)) llst))
) ;_ end of if
) ;_ end of if
) ;_ end of progn
) ;_ end of if
(princ (strcat "Selected layers: " (car llst)))
(foreach ln (cdr llst)
(princ (strcat "," ln))
) ;_ end of foreach
) ;_ end of while
(setq en (entnext)) ;Get 1st entity
(while (and en (setq ed (entget en)))
(if (setq ln (member (cdr (assoc 8 ed)) llst))
(progn
(setq ld (tblsearch "LAYER" (car ln)))
;; Color
(if (not (assoc 62 ed)) (setq ed (append ed (list (assoc 62 ld)))))
;; Linetype
(if (not (assoc 6 ed)) (setq ed (append ed (list (assoc 6 ld)))))
(entmod ed)
)
)
(setq en (entnext en))
)
(command "._LAYMRG")
(foreach ln llst
(command "_Name" ln)
) ;_ end of foreach
(command "")
(while (> (getvar "CMDACTIVE") 0)
(command pause)
) ;_ end of while
(princ)
) ;_ end of defun