Another for fun: 
	 
 
(defun c:foo (/ a b el l s w)
  ;; RJP » 2025-07-23
  ;; Creates separate polyline segments preserving widths etc..
  (cond	((setq s (ssget '((0 . "LWPOLYLINE"))))
	 (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
	   (setq el (entget e))
	   (setq a (append (reverse (member '(100 . "AcDbPolyline") (reverse el))) '((90 . 2))))
	   (setq b (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) el))
	   (while (cddddr b)
	     (setq l (list (car b) (cadr b) (caddr b) (cadddr b)))
	     (setq w ;; Set global width if start and end are 'equal'
		     (if (equal (cdadr b) (cdaddr b) 1e-4)
		       (list (cons 43 (cdadr b)))
		     )
	     )
	     (setq b (cddddr b))
	     (entmakex (append a (append l w (list (car b) (cadr b) (caddr b) (cadddr b)))))
	   )
	   (entdel e)
	 )
	)
  )
  (princ)
)