本帖最后由 gufeng 于 2014-8-7 09:29 编辑
;;_把代码保存LSP,加载到CAD的启动组,执行命令test
;;_2014年8月7日 获取指定目录下的DWG文件,批量执行操作(打开文件-->分解块block1-->保存) GoodLuck - (defun c:Test(/ FILE_LIST FOLD SF SFF RunNow QF_GETFOLDER GETFILELIST PATH-ADDBACKSLASH)
- (vl-load-com)
- ;_Thanks caoyin
- ;_http://bbs.mjtd.com/dispbbs.asp?BoardID=3&ID=69986&replyID=&skin=0
- (defun GetFileList (dirName / files lst)
- (defun path-addBackSlash (path)
- (if (not (member (substr path (strlen path)) '("\" "/")))
- (strcat path "\")
- path
- )
- )
- (setq dirName (path-addBackSlash dirName)
- files (mapcar '(lambda (x) (strcat dirName x))
- (vl-directory-files dirName "*.dwg" 1)
- )
- )
- (mapcar '(lambda (x)
- (setq lst (append lst (GetFileList (strcat dirName x))))
- )
- (vl-remove-if
- '(lambda (x) (member x '("." "..")))
- (vl-directory-files dirName nil -1)
- )
- )
- (append files lst)
- )
- ;; 本代码仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
- ;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认.
- ;; ========================================================
- ;; 作者:秋枫,参考了灯火的VBA程序
- ;; 用法:(qf_getFolder msg)
- ;; 例子:(qf_getFolder "选择文件夹:")
- ;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil
- ;; http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=302
- (defun qf_getFolder (msg / WinShell shFolder path catchit)
- (vl-load-com)
- (setq winshell (vlax-create-object "Shell.Application"))
- (setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
- (setq
- catchit (vl-catch-all-apply
- '(lambda ()
- (setq shFolder (vlax-get-property shFolder 'self))
- (setq path (vlax-get-property shFolder 'path))
- )
- )
- )
- (if (vl-catch-all-error-p catchit)
- nil
- path
- )
- )
- (setq fold (qf_getFolder "选择文件所在目录:"))
- (if fold
- (progn
- (setq file_list (GetFileList fold))
- (if file_list
- (progn
- (setq sf (strcat (getvar "TEMPPREFIX") "批处理文件201408.scr"))
- (setq sff (open sf "w"))
- (mapcar '(lambda (x)
- (princ (strcat "open "" x ""\n" "(explode_block1) qsave close\n") sff)
- )
- file_list
- )
- (close sff)
- (princ (strcat "\n目录下" fold "\n\t共有DWG文件数: " (itoa (length file_list))))
- (initget "Y N")
- (setq RunNow (getkword "\n是否立刻执行[是(Y)/否(N)]:<否>"))
- (if (= RunNow "Y")
- (progn
- (command "._script" sf)
- (princ "\n处理完成")
- )
- (princ "\n放弃立刻执行")
- )
- )
- (princ "\n目录下没有DWG文件")
- )
- )
- (princ "\n请选择目录")
- )
- (princ)
- )
- (defun explode_block1 (/ OLDQAFLAGS SS)
- (setq ss (ssget "x" '((0 . "INSERT") (2 . "BLOCK1"))));_分解的块名 BLOCK1
- (if ss
- (progn
- (setq oldQAFLAGS (getvar "QAFLAGS"))
- (setvar "QAFLAGS" 0)
- (command "_explode" ss)
- (setvar "QAFLAGS" oldQAFLAGS)
- )
- )
- )
- (princ)
|