找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1503|回复: 6

[求助] 如何遍历某目录下所有CAD文件

[复制链接]
发表于 2014-7-23 11:38:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何遍历某目录下所有CAD文件,也包括子目录下的DWG。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7071个

财富等级: 富甲天下

发表于 2014-7-23 13:57:22 | 显示全部楼层

;;; By Elpanov Evgeniy
;;; (getfile "*.Dwg" "D:\\Dwg")


  1. (defun GetFile (f p)
  2.   (apply
  3.     'append
  4.     (cons
  5.       (if (vl-directory-files p f)
  6.         (mapcar
  7.          '(lambda (x) (strcat p "\" x))
  8.           (vl-directory-files p f)
  9.         )
  10.       )
  11.       (mapcar
  12.        '(lambda (x) (GetFile f (strcat p "\" x)))
  13.         (vl-remove
  14.           ".."
  15.           (vl-remove
  16.             "."
  17.             (vl-directory-files p nil -1)
  18.           )
  19.         )
  20.       )
  21.     )
  22.   )
  23. )

  24. (defun GetFirstFile (f p)
  25.   ;; By ElpanovEvgeniy
  26.   ;; (GetFirstFile "a?ad.exe" '("C:\\Program Files"))
  27.   (cond
  28.     ((not p) nil)
  29.     ((vl-directory-files (car p) f)
  30.      (strcat (car p) "\" (car (vl-directory-files (car p) f)))
  31.     )
  32.     ((GetFirstFile
  33.        f
  34.        (append
  35.          (mapcar
  36.            (function (lambda (x) (strcat (car p) "\" x)))
  37.            (vl-remove ".."
  38.                       (vl-remove "." (vl-directory-files (car p) nil-1))
  39.            )
  40.          ) ;_ mapcar
  41.          (cdr p)
  42.        ) ;_ append
  43.      ) ;_ GetFirstFile
  44.     )
  45.   ) ;_ cond
  46. ) ;_ defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-23 14:58:51 | 显示全部楼层
用vl-directory-files返回一个列表,挨个处理不就行了吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-23 15:39:54 | 显示全部楼层
我想简单了。楼上高手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-26 23:55:33 | 显示全部楼层
今天琢磨了一个,请高手指正.这个代码只是输出文件名,如果要做操作,可修改相应的outPutFileList函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-26 23:56:37 | 显示全部楼层
本帖最后由 czx663 于 2014-7-27 00:48 编辑
  1. ;|功能:遍历文件夹下及子文件夹的某类文件
  2. 参数: FileName  寻找文件的块名
  3.       Path      指定的目录路径
  4. |;

  5. (setq DirList (list "*@"))                ;定义一个非空的公共变量,临时储存文件目录
  6. (defun getFile (FileName     Path          /               MyErr
  7.                 DirListBak   FileListTemp DirListTemp  Ent
  8.                 NewPath             DirListTempBak
  9.                )
  10.   (defun MyErr (Msg)
  11.     (setq DirList (list "*@"))
  12.     (close f)
  13.     (alert Msg)
  14.   )                                        ;defun MyErr
  15.   (setq MyErr *Error*)
  16.   (if (not DirList)
  17.     (progn
  18.       (setq DirList (list "*@"))
  19.       (exit)
  20.     )                                        ;progn
  21.   )                                        ;if
  22.   (if (member "*@" DirList)
  23.     (setq DirList (vl-remove "*@" DirList))
  24.   )                                        ;if

  25.   (setq DirListBak DirList)                ;全局变量的备份
  26.   (if (not DirList)
  27.     (progn
  28.       (setq FileListTemp (vl-directory-files Path FileName 1))
  29.                                         ;指定目录下的文件列表
  30.       (if (not FileListTemp)
  31.         (outPutFileList (strcat Path "下没有" FileName "文件"))
  32.         (progn
  33.           (outPutFileList Path)
  34.           (outPutFileList FileListTemp)
  35.         )                                ;progn
  36.       )                                        ;if

  37.       (setq DirListTemp
  38.              (vl-remove
  39.                "."
  40.                (vl-remove ".." (vl-directory-files Path nil -1))
  41.              )
  42.       )                                        ;指定目录下的目录列表
  43.       (if (not DirListTemp)
  44.         (exit)
  45.         (setq DirListBak DirListTemp)
  46.       )                                        ;if

  47.     )                                        ;progn
  48.   )                                        ;if


  49.   (foreach ent DirList
  50.     (setq NewPath (strcat Path "\" Ent))
  51.     (setq FileListTemp (vl-directory-files NewPath FileName 1))
  52.                                         ;指定目录下的文件列表
  53.     (if        (not FileListTemp)
  54.       (outPutFileList (strcat NewPath "下没有" FileName "文件"))
  55.       (progn
  56.         (outPutFileList NewPath)
  57.         (outPutFileList FileListTemp)
  58.       )                                        ;progn
  59.     )                                        ;if

  60.     (setq DirListTemp
  61.            (vl-remove
  62.              "."
  63.              (vl-remove ".." (vl-directory-files NewPath nil -1))
  64.            )
  65.     )                                        ;指定目录下的目录列表
  66.     (setq DirListTempBak DirListTemp)
  67.     (if        (not DirListTemp)
  68.       (setq DirListBak (vl-remove Ent DirListBak))
  69.       (progn
  70.         (foreach Ent1 DirListTemp
  71.           (setq EntTemp (strcat Ent "\" Ent1))
  72.           (setq DirListTempBak (subst EntTemp Ent1 DirListTempBak))
  73.         )                                ;foreach
  74.         (setq DirListBak (insertList DirListBak DirListTempBak Ent))
  75.       )                                        ;progn

  76.     )                                        ;if

  77.   )                                        ;foreach
  78.   (setq DirList DirListBak)
  79.   (getFile FileName Path)
  80. )                                        ;defun getFile



  81. ;|功能:将文本输出到文件
  82. 参数:Str :要输出的文本
  83. |;
  84. (defun outPutFileList (Str / f)
  85.   (setq f (open "d:\\FileList.txt" "a"))
  86.   (write-line (vl-prin1-to-string Str) f)
  87.   (close f)
  88. )                                        ;defun


  89. ;|功能:将一个列表中一个元素替换
  90. 参数:   Lst    保存的列表     类型:列表
  91.         Atoms  插入元素列表   类型:列表
  92.         PosAtoms Lst中指定位置的被替换元素  类型:元素
  93. |;
  94. (defun insertList (Lst Atoms PosAtoms / FrontLst BehindLst)
  95.   (if (member PosAtoms Lst)
  96.     (progn
  97.       (setq FrontLst (reverse (cdr (member PosAtoms (reverse Lst)))))
  98.       (setq BehindLst (cdr (member PosAtoms Lst)))
  99.       (setq Lst (append FrontLst Atoms BehindLst))
  100.     )                                        ;progn
  101.     (alert "输入的插入点有误")
  102.   )                                        ;if
  103.   Lst
  104. )                                        ;defun insertList
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 15:20:33 | 显示全部楼层
谢谢 Underway,测试成功。

也谢谢czx663的热心
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 20:33 , Processed in 0.264256 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表