this is my subroutine for updating block definition from file, needs vars BNAME for blockname, and BFNAME for path including drawing file name with .DWG
if I recall correctly the use of = in the insert command causes redefinition
(progn
(command "-insert" (strcat bname "=" bfname))
(if (tblsearch "BLOCK" bname) (command "y")) ;yes to redefine
(command) (command) ;cancel insert after redefine
(princ (strcat "\nUpdated block " bname " from file " bfname))
;; find block insertions & update
(setq inslst (ssget "X" (list (cons 0 "INSERT")(cons 2 bname)(cons 67 (if (XYZ_IS_PAPER) 1 0)))))
(if inslst (XYZ_MAPSET '(lambda (x) (entupd x)) inslst nil)) ;requires external routine
)
;;;=========================================================================
;;; XYZ_is_paper - returns nil for modelspace, T for paperspace
;;; by Vladimir Nesterovsky
;;; use (cons 67 (if (XYZ_is_paper) 1 0)) for ssget "X" of mspace vs. pspace
;;; note that pspace will get all objects in layouts, not just current
;;;=========================================================================
(defun XYZ_is_paper () (> 2 (getvar "cvport") (getvar "tilemode")))
;;;=========================================================================
;;; Apply func to every entity in ss - from Looking Glass Microproducts
;;; ex: (XYZ_MAPSET '(lambda (x) (redraw x 2)) ss1 nil)
;;;=========================================================================
(defun XYZ_mapset (func ss prmpt / i l suffix ename)
(if prmpt (SETV "modemacro" (getvar "modemacro")))
(If ss
(Progn (Setq func (Eval func)
i 0
l (SsLength ss)
suffix (Strcat " of " (ItoA l))
) ;_ Setq
(Repeat l
(Setq i (1+ i)
ename (SsName ss (- l i))
) ;_ Setq
(If prmpt
(Setvar "modemacro" (Strcat prmpt " " (ItoA i) suffix))
) ;_ If
(princ "")
(func ename)
) ;_ Repeat
(If prmpt
(RSETV "modemacro")
) ;_ If
ss
) ;_ Progn
) ;_ If
) ;_ Defun
;==========================================================
; SETV function saves setvar settings to be reset at end with RSETV
; (setv "cmdecho" 0) set cmdecho off
; (rsetv "cmdecho") resets cmdecho (see below)
; taken from Essential AutoLISP by Roy Harkow
;==========================================================
(defun SETV (sysvar newval / cmdnam)
(setq cmdnam (read (strcat sysvar "1"))) ;Create [savevar]1
(set cmdnam (getvar sysvar)) ;Save [savevar]'s value
(setvar sysvar newval) ;Then set [savevar] to new value
)
(defun RSETV (sysvar / )
(if (eval (read (strcat sysvar "1"))) ;Only change if exists
(progn
(setq cmdnam (read (strcat sysvar "1"))) ;Create [savevar]1
(setvar sysvar (eval cmdnam)) ;Restore [savevar]'s value
(set cmdnam nil)
) ;end progn
) ;end if
)