非递归返回指定目录下所有子目录
(defun xdirectory(folder);;;好象不含隐藏目录(setq folder(list(list folder)))
(while(car(setq folder(cons(apply'append(mapcar'(lambda(x)(mapcar'(lambda(y)(strcat x"\\"y))(cddr(vl-directory-files X nil -1))))
(car folder)))folder))))(apply'append folder))
(defun SubFolers(folder / folders *Fso fold xx);;;包含隐藏目录
(defun xx(/ lst)
(vlax-for x(vlax-get-property(vlax-invoke-method *fso 'getfolder fold)'SubFolders)
(setq lst(cons(vlax-get-property x 'path)lst)))
(reverse lst))
(if(VL-FILE-DIRECTORY-P folder)
(progn
(setq *Fso(vlax-get-or-create-object"Scripting.FileSystemObject")
folders(list(vlax-get-property(vlax-invoke-method *fso 'getfolder folder)'path))i 0)
(while(setq fold(nth i folders))
(setq folders(append folders(append(xx)))i(1+ i)))
(vlax-release-object *Fso)
folders))) 感谢大佬的共享! 多谢73大佬,这个功能很实用 感谢大佬的共享!
前辈,帮忙看一下,我拼凑的这个,拖拽获取当前lsp文件所在目录并添加到CAD搜索路径,在CAD2010上完美运行,但是CAD2006上就会出问题;
;CAD2006下路径较深就会多出来一个双引号
输出结果:"D:\Downloads\【办公软件】\AutoCAD
(vl-load-com)
(while (= (logand (getvar "CmdActive") 1) 1)(command)) ;结束已有命令
(princ "\n")
(setq path (getvar "lastprompt"))
(if (wcmatch (strcase path) "*(LOAD \"*")
(setq str (vl-string-search "(LOAD \"" path)
path (substr path
(+ str 8)
(- (vl-string-search "\")" path) str 7) ;为lastprompt提取的命令去头去尾
)
)
)
(setq path (vl-filename-directory (vl-string-translate "/" "\\" path))) ;转换路径,去掉文件名及扩展名,提纯路径
(setenv "ACAD" (strcat (getenv "ACAD") ";" (vl-string-right-trim "\"" path))) ;删除多余的双引号后插入搜索目录末尾,06上未生效
(princ)
因工作需要,需要大量使用CAD2006,麻烦帮忙看一下该怎么调整?
还有这种方式,也是CAD2010正常,CAD2006路径较深就会提示; 错误: 参数类型错误: (or stringp symbolp): nil
;;添加到搜索目录,支持appload加载、命令行(load "xx")加载和直接拖拽加载
;;CAD2010正常,CAD2006没反应
(vl-load-com)
(defun set_path (/ str str1 str2 str3 n1 n2)
(while (= (logand (getvar "CmdActive") 1) 1)(command)) ;结束已有命令
(princ "\n")
(setq str (getvar "lastprompt")) ;lastprompt方式,获得最后一行命令,例如:(LOAD "D:/Downloads/添加路径.lsp")
(if (wcmatch (strcase str) "*(LOAD \"*")
(setq
n1 (vl-string-search "(LOAD \"" str)
str1 (substr str (+ n1 8))
n2 (vl-string-search "\")" str1)
str2 (substr str1 1 (1+ n2))
str3 (vl-filename-directory (vl-string-translate "/" "\\" str2))
)
)
(setenv "ACAD" (strcat (getenv "ACAD") ";" (vl-string-right-trim "\"" str3)))
)
(set_path)
(setq set_path "文件路径已添加到搜索目录!")
页:
[1]