Since there's no guarantee they'll be in only one location I'd probably do something like this, and then deal with what if found (i.e. use the list with the greatest length perhaps).
REAL QUICK AND DIRTY, NOT MEANT TO REPRESENT BEAUTIFUL CODE.
(defun FindFiles ( spec / result )
;; Iterate each path in AutoCAD's support path
;; searching for files that meet the spec. Return
;; each successful list of files as a list, the
;; first member being the path.
;;
;; e.g. (FindFiles "*.dll")
;;
;; (
;; ( "C:\\Cad\\Acad2004\\express"
;; "acetutil.dll"
;; "axctextapp.dll"
;; "axRText.dll"
;; ...
;; "propulate.dll"
;; "RText.dll"
;; "sysvdlg.dll"
;; )
;;
;; ( "C:\\CAD\\Acad2004\\drv"
;; "CalComp8Res.dll"
;; "dgwintbn.dll"
;; "Dwfplot8Res.dll"
;; ...
;; "ps8Res.dll"
;; "raster8Res.dll"
;; "xes8res.dll"
;; )
;; )
(vl-remove-if 'null
(mapcar
'(lambda ( path / result )
(if (setq result (vl-directory-files path spec 1))
(cons path result)
)
)
( (lambda ( str delim / path result )
(foreach code (reverse (vl-string->list str))
(if (eq code delim)
(if path
(setq
result (cons path result)
path nil
)
)
(setq path (cons code path))
)
)
(mapcar 'vl-list->string
(if path
(cons path result)
result
)
)
)
(getvar "acadprefix")
(ascii ";")
)
)
)
)
So you might use it like --
(cond
( (setq TadFiles (FindFiles "*.tad"))
;; do something with the files,
;; like load into a dcl dialog yada
)
)
Edit: Added example above.