QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3165|回复: 2
收起左侧

[求助] 关于LISP批量处理查找文件的问题

[复制链接]
发表于 2013-9-27 15:17:47 | 显示全部楼层 |阅读模式 来自: 中国湖北武汉

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!, W4 k! y- g8 [6 a- m
/ R* I" L$ z! t6 m: l# N

! e, l# s6 ?8 d. R' o
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持# x* v/ Z: a) i  Y/ ^' f# }
(vl-load-com)
% k9 o. U: A+ J$ } (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent2 L3 D0 w6 e* M/ ~9 H3 C! Q
);;主程序定义
  X+ m$ ~' m1 k) z8 S; k/ }0 @: \$ {(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
9 M; W7 n2 n8 [9 N; S  b(setvar "cmdecho" 0)2 O# c+ t8 B: R7 E6 s
(setq path4 L5 s( `) p; f* y) O4 M
(strcat
6 j6 \  j) W: v1 ^ (vl-string-right-trim
" R0 N/ ]/ K& d- T "\\"$ N& e9 M, x' }. P( U. U
(strcase (acet-ui-pickdir
) a+ D# b& w2 O "选择目录"  E1 ^% _& W5 A# v: g( @
(vl-string-right-trim "\\" (getvar "dwgprefix"))+ C( d4 P' L" c: T3 T; L( L9 Y2 G' b5 t
"批量修改"
3 |& g, {" |4 R% S7 Y )+ U6 B+ w# y4 e0 `6 ~
)$ f$ R: ]5 L. ?+ {
)
, v: U" F/ m2 K/ _ "\\"4 q4 T0 T) Q7 J3 G3 x; z
)4 C4 j  ]+ h& ]1 n% C+ T
)
+ h7 W% u2 m( t (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
8 T/ @6 f7 E, Y5 e6 c! D0 b% m  w+ Z4 s(setvar "acadlspasdoc" 0)
- a! p5 o. h! z- a6 n- @ (setq dwgname (vl-directory-files path "*.DWG"))) Y, w5 W5 Y& b. M9 w1 f$ Q6 \+ u$ `6 E6 Q
(setq num 0)/ c& O, k2 Z! w. @" E! h
(if (/= dwgname NIL)
1 C+ X, y) M' T. A  L (progn
) Y9 I) _$ x5 \+ j (setq APP (vlax-get-acad-object));获得Acad 对象
- v/ N9 G0 R4 P  k4 l(repeat (length dwgname)
) H5 `* y7 _9 _/ D (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
( S2 c) _% O+ ~8 R- D3 @  G/ { (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获
6 e' ^2 C4 Z1 w' K* _" X, i 得其对象1 h7 l5 r. c3 a! y8 q2 }
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
, J* a( J+ L' p% S;; …1 D8 v; ~3 x2 J8 x$ h
;; …
3 J2 Q: B' Y7 r# c" d5 {% r: K8 j(vla-close doc :vlax-false);关闭图形(不检查是否保存)5 s! O) R. x; s: l8 c4 P6 w
(setq num (1+ num))
8 W4 U' V$ u5 a2 s0 v2 s$ W8 u ): \' Z9 }9 g& V$ w$ B
(vlax-release-object doc)( f. i6 B! Q7 N' M2 A3 Y
(vlax-release-object APP)
% `, E! D5 q1 i- v0 l' S+ `, b5 k, F )' K  V/ |0 J5 Q: B4 t/ J
(prompt "\n所选目录中未有任何图形!!")5 T& v9 g) E- N8 }/ T/ Z
)
" l6 g, l! @/ h$ s6 J+ u" c* ]; P1 e (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
9 M$ J: t! B/ w(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
: }0 B7 j+ M! {1 @(princ)  N/ ^. J# S7 K0 P6 d' R$ k/ A
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

关于LISP批量处理查找文件的问题

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)7 }" M, Z6 U# K- c2 f4 u0 ^* }' ~
  2. ;;需要相应版本的ET(Express Tools)工具支持
    & }2 o5 B6 ]! T( ?2 y/ s' d/ V  n
  3. (vl-load-com)
    ; t3 B! _" V9 w7 X
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
    ) P: J7 x7 @; m9 O
  5. ;;主程序定义
    , A9 n  C: ?+ p& Z
  6. (setq OLDECHO (getvar "cmdecho"))  v, q" v, _, l& D
  7. ;;保存系统变量值
      a7 ]9 T% A9 W
  8. (setvar "cmdecho" 0)8 `4 A! e4 ~9 Y5 I3 w
  9. (setq path
    - |2 L# |2 h0 r/ a
  10. (strcat# v; e" o/ S8 P! M4 v! d
  11. (vl-string-right-trim0 x& s% C$ a! t! m( I& f" g7 S9 C. f% ^
  12. "\"
    ' P0 o# i3 m, g9 _. J9 Q/ X
  13. (strcase (acet-ui-pickdir
    4 ]$ `% I1 P  i8 |
  14. "选择目录"4 E, V. R% |4 L5 [3 o  V7 C
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    * a; z4 K; v0 I% ?
  16. "批量修改"
    5 J7 V6 N  d$ \) {
  17. )
    9 j" e* e# B) Y+ M
  18. )
      [  i4 B9 [' {
  19. )
    % a  U5 x' r: g+ N* y# F. C
  20. "\"( _5 _+ R, M+ b% `5 Q" Z
  21. ): `7 z" z* Q) n0 k9 v
  22. )
    2 r( e: J% Q, ?& o6 v9 y
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))
    * ]; D" x  C/ H, y8 d
  24. ;;保存系统变量值
    . J! Y& u) a7 {- e+ P7 z
  25. (setvar "acadlspasdoc" 0)' |2 J: T6 F  D% C! l* r
  26. (setq dwgname (vl-directory-files path "*.DWG"))% M0 b7 l1 h# K6 d
  27. (setq num 0)' e6 p9 \4 e( E
  28. (if (/= dwgname NIL)
    3 C$ L/ O# f: m2 [
  29. (progn- {2 P& Z' ]( }* g, a5 s, R
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象, x, B2 i  {' Z. q) h: a
  31. (repeat (length dwgname)$ h6 E$ H# P: ^- t* l
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname)))); E; s, V- @4 h" F' B4 @# j
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))
    + x7 s+ }* o/ n
  34. ;打开图形并获得其对象
    9 @, O1 O6 X' ?7 A, }# f( \
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    7 W! v& V. X. Q
  36. ;; …* ^% q; b6 [8 K9 [0 ?7 {* P
  37. ;; …% [7 i/ f) i+ ]5 O/ r
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)2 Q+ {9 l; ]8 y) B0 D/ E5 j
  39. (setq num (1+ num))
    5 W8 y# z7 F5 v/ o% I3 H
  40. )
    & |2 Z) t7 Y$ f
  41. (vlax-release-object doc): S5 n( s  b6 ~$ H
  42. (vlax-release-object APP)7 k* Q; E" F/ A
  43. )
    # e6 b+ @" Q) p, c6 o5 ?/ ~! B2 s/ D
  44. (prompt "\n所选目录中未有任何图形!!")- J8 C- `- u* z5 g4 ?6 ?
  45. )/ p6 A7 m. |/ _" h
  46. (setvar "acadlspasdoc" OLDLSP)! _. q1 u0 W; r% z% q
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了4 _9 k4 U: t5 U$ t, w

) [; K, ~* S; p, u- W" b- o你在使用中出现过这个对话框吗? Untitled-1.gif + s" k  Y* Z9 h$ l0 b4 {
如果出现了,在其中选择相应目录即可./ l( y. G/ `; t- H
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!8 q9 C( w* P, x8 P
附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)# E5 S3 L" w( I3 v" s
  2. ;;需要相应版本的ET(Express Tools)工具支持1 V% v& n) y9 c) C
  3. (vl-load-com)
    ) ^& Q( q* o+ L8 B% I
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)
    1 |( N$ N$ ^. w* I' }
  5.   ;;主程序定义- \7 Q9 g$ }! O) I3 v
  6.   (setq OLDECHO (getvar "cmdecho"))
    9 I: g9 l# \% |6 f/ b
  7.   ;;保存系统变量值
    ) ?' e9 e3 k& s& O9 a! \: `
  8.   (setvar "cmdecho" 0)
    9 d& w$ d4 F- A% Y1 k
  9.   (setq        path
    - L% ^- b. E% D; R; l. f
  10.          (strcat' C2 F$ |- Y/ u) w( k; U
  11.            (vl-string-right-trim8 \5 q1 G+ c/ h% G) `
  12.              "\"# y- {2 W. D3 ~6 L' G+ U
  13.              (strcase (acet-ui-pickdir
    ) H- i/ B& P, u9 N4 V
  14.                         "选择目录"
    " L+ `3 R% H- \; {- b# d
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    $ K) ~4 @( ?- R' u5 d
  16.                         "批量修改"3 f1 m$ g0 ~, U, d) Z
  17.                       )
    - E9 q& T; q: u4 K, s* q: T- G6 k$ U
  18.              )
    0 U- w* A2 L8 s# P0 q+ j; I3 _
  19.            )+ S* O: h2 W" Y- G* Q' n- e( @
  20.            "\"& n, X. q9 q/ {1 H
  21.          )
    9 v  B; E, C& k1 I# y  ~  o$ T
  22.   )
    8 G2 [+ \$ a8 i$ X, m, H
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    8 S/ _) V7 r/ q8 w, Z7 A) l
  24.   ;;保存系统变量值4 y: F: v) T2 I7 N9 F
  25.   (setvar "acadlspasdoc" 0)7 m6 V8 G; B8 ~, g1 {3 J0 H, [
  26.   (setq dwgname (vl-directory-files path "*.DWG"))+ v1 O: u; h# ^! y% `/ P/ N$ R/ {
  27.   (setq num 0)# ]( p" K, q  D4 w1 u
  28.   (if (/= dwgname NIL)5 ~7 ^1 {' A/ H/ R
  29.     (progn
    , N8 e  J% [- @  z# d5 K/ R* ?) {
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象
    6 A' ?6 \- H( e5 r1 Q. N
  31.       (repeat (length dwgname)
    8 ~0 I2 @. _: ~- b- A7 m' l  ^
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
      S5 V) ?: l5 C5 N
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))! X' H% F$ C  u# @% {
  34.                                         ;打开图形并获
    + V5 b) F5 X5 B* `2 v' A
  35.         得其对象9 x, `; {3 x8 B
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    1 Z* P$ i3 h( z" L# s
  37.         ;; …
    / v5 h) s* r+ x7 ]6 l1 ~
  38.         ;; …
    1 `0 ~; p- z7 `& j; m/ }
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)
    0 h; S$ f8 i3 ]; }, q
  40.         (setq num (1+ num))
    4 [; x% R( A, V0 }( X* c# [/ I" n' T2 M
  41.       )
    1 e7 {3 |% |3 ^
  42.       (vlax-release-object doc)
    ! P. I3 d: O' |: O5 A1 i9 y
  43.       (vlax-release-object APP)
    . N' {$ Q  g2 p4 D% G1 ]9 A; I
  44.     ): u% O( d: Z0 W" }4 u! K3 U6 H
  45.     (prompt "\n所选目录中未有任何图形!!")9 V( {5 g$ m7 L: `  l
  46.   )9 E; m/ y. ~, P) A& y
  47.   (setvar "acadlspasdoc" OLDLSP)- n$ p" r; a& f. h' p0 _8 r' _
  48.   ;;恢复系统变量值
    * e. `- v8 q3 i+ [6 h) Z
  49.   (setvar "cmdecho" OLDECHO)5 o" ]8 L+ ~4 N2 H2 \/ n8 ^
  50.   ;;恢复系统变量值; K7 ^5 |/ T/ p( ]! c+ {) ?
  51.   (princ)
    5 a1 O7 r4 d$ r
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 16

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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