Тема: Как создать утилиту на действия: Открыть-найти-закрыть файл?

Добрый вечер (у нас), господа.
Подскажите путь решения. Есть сотня файлов. Надо файл открыть, найти (или не найти) блок. Если нашли, занести (записать) куда-то имя файла. Закрыть файл. Открыть следующий файл и т.д. до конца списка файлов. Ну не ручками же лопатить?! Спасибо за внимание.

Re: Как создать утилиту на действия: Открыть-найти-закрыть файл?

  (setq BlkName "test")  ;_Имя блока
  (setq *FileList* nil);_Список файлов
  ;;;dofile Ф-ция работы с обрабатываемым файлом
;;;curDOC — Vla указатель на обрабатываемый документ
;;; типа (vla-get-activedocument (vlax-get-acad-object))
;;; Использовать ActiveX, не command
(defun dofile ( curDOC / name)
(princ "\nИмя файла:")    ;;;Печать имени файла
(princ  (setq name (vlax-variant-value (vla-GetVariable curDOC "DWGNAME"))))
 (if (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda ()
       (vla-item (vla-get-Blocks curDoc) BlkName)))))
   (progn ;_Есть
     (princ "  >>> Найден")
     (setq name (list name))
     )
   (progn ;_Нет
     (princ "  >>> Отсутствует")
     (setq name nil)
     )
   )
    name
    )
;| Основной код взят с
  CADALYST 03/05 Tip2023: PurgeFiles.lsp  Directory Clean Up  (c) Andrzej Gumula
  [c]2004 Andrzej Gumula, Katowice, Poland
  e-mail: a.gumula@wp.pl|;
(vl-load-com)
;;;Ф-ция работы с обрабатываемым файлом
;;;curDOC — Vla указатель на обрабатываемый документ
;;; типа (vla-get-activedocument (vlax-get-acad-object))
(defun c:DoFile (/ FilesList SubDir Files File)
  (setq *FileList* nil);_Список файлов
  (defun GetFolder (/ Dir Item Path)
    (cond
      ((setq Dir
  (vlax-invoke
   (vlax-get-or-create-object "Shell.Application")
     'browseforfolder 0
     "Select folder with DWG files:" 1 ""))
       (cond
   ((not (vl-catch-all-error-p
        (vl-catch-all-apply 'vlax-invoke-method (list Dir 'Items))))
    (setq  Item (vlax-invoke-method
           (vlax-invoke-method Dir 'Items)
           'Item))
    (setq Path (vla-get-path Item))
    (if
      (not (member (substr Path (strlen Path) 1) (list "/" "\\")))
       (setq Path (strcat Path "\\")))))))
    Path)
  (defun vl-findfile (Location / DirList Path AllPath)
    (MakeDirList Location)
    (setq DirList (cons Location DirList))
    (foreach Elem DirList
      (if (setq Path (vl-directory-files Elem "*.dwg"))
  (foreach Item Path
    (setq AllPath (cons (strcat Elem "/" Item) AllPath)))))
    (reverse AllPath))
  (defun MakeDirList (Arg / TmpList)
    (setq TmpList (cddr (vl-directory-files Arg nil -1)))
    (cond (TmpList
       (setq DirList (append
       DirList
       (mapcar '(lambda (z) (strcat Arg "/" z)) TmpList)))
       (foreach Item TmpList (MakeDirList (strcat Arg "/" Item))))))
  (setq *ERR-LIST* nil)
  (if (not FileSystemObject)
    (setq FileSystemObject
     (vla-getInterfaceObject
       (vlax-get-acad-object)
       "Scripting.FileSystemObject")))
  (cond
    ((= (getvar "SDI") 0)
     (cond
       ((setq DwgPath (GetFolder))
  (initget 1 "Yes No")
  (setq
    Subdir (cond
       ((getkword "\nОбрабатывать поддиректории? [Yes/No]: "))
       (T "Yes")))
  (if (equal SubDir "Yes")
    (setq  Files
     (vl-findfile (substr DwgPath 1 (1- (strlen DwgPath)))))
    (setq  Files (mapcar '(lambda (x) (strcat dwgpath x))
            (vl-directory-files DwgPath "*.dwg" 1))))
  (setq Files (mapcar 'strcase Files))
  (cond
    (Files
     (vlax-for & (vla-get-documents (vlax-get-acad-object))
       (setq FilesList
        (cons (strcase (vla-get-fullname &)) FilesList)))
     (foreach & Files
       (cond
         ((not (member & FilesList))
    (cond
      ((/= (logand (vlax-get-property
         (vlax-invoke-method
           FileSystemObject
           'getfile
           &
         )
         'Attributes
             )
             1
           )
           1
       )
       (cond
         ((setq File
          (vla-open (vla-get-documents
             (vlax-get-acad-object)) &))
          (prompt
      (strcat "\nОбработка файла" & ". Подождите..."))
;;;!!!!!!! Вызываем ф-цию работы с файлом FILE — Vla указатель на документ
         (setq  *FileList* (append  *FileList* (dofile FILE)))
          (prompt (strcat "\nSave and close " &))
          (vla-save File)
          (vla-close File)
          (vlax-release-object File))
         (T
          (prompt
      (strcat
        "\nCannot open "
        &
        "\nDrawing file was created by an incompatible version. ")))))
      (T (prompt (strcat & " is read-only. Purge canceled. ")))))
         (T (prompt (strcat & " is open now. Purge canceled. "))))))
    (T (prompt "\nNothing files found to purge. "))))
       (T (prompt "\nNothing selected. "))))
    (T (prompt "\nThe routine is not available in SDI mode. ")))
     (if *FileList*
     (progn  ;_Есть список файлов
       (princ (strcat "\nБлок " BlkName " найдев в:"))
       (mapcar 'print *FileList*)))
  (princ)
  )
(prompt "\n===   Команда загружена. Наберите Dofile  ===")(princ)

После работы в переменной *FileList* - список файлов