QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 3067|回复: 2
收起左侧

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!$ H8 ^5 r2 L7 I4 n" `  A
* V+ B. z4 B# t4 x
4 Z) v# M2 _( ]/ B: t. H
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
1 U$ Y, J9 q( L9 a) b; n$ K(vl-load-com)
/ @6 X2 ~- z5 |: u. F (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent
3 \  w: o0 H: a* _( e/ T$ }8 k- i );;主程序定义
8 O  c& ]# j) w8 X(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
/ ~% S4 X7 F3 }3 W, D2 z% ?9 Y! A! O(setvar "cmdecho" 0)
7 d( `( ?6 I; @+ o* X  t (setq path! _7 ~: P( Y# L: X+ z( F7 l3 a
(strcat  ?  |3 A  C% y" m% S& y  x
(vl-string-right-trim1 `! ^- E! g+ v2 L% `) a
"\\"8 G/ e1 q# ^" R. [) v  X  J' z5 w
(strcase (acet-ui-pickdir8 i. W* {9 p7 n8 Q; W' Q+ g
"选择目录", u  D, Q- `7 }
(vl-string-right-trim "\\" (getvar "dwgprefix"))9 `: a% G0 J8 j: a, N4 a5 g
"批量修改"3 w1 H, C* D# H" s( y# \
)# |5 b5 Q* v/ F
)1 ~1 |( o$ w2 I- ^( _
)4 V2 R/ J- y7 N
"\\": p5 G& ~/ U" ^6 Q0 S6 L- W4 ~" {" y* d
)2 H( Y0 P7 U+ x8 {$ z. m5 b- P
)
- x! R9 p- s9 C (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
, p, Z6 z1 ]- v* X(setvar "acadlspasdoc" 0)" y7 q* r, n* \9 {, J$ ^) B& w
(setq dwgname (vl-directory-files path "*.DWG"))
8 Q, X6 F, d2 V2 ~( w8 h (setq num 0)
% j1 r% V# t3 w% q9 y( O* m1 L, L (if (/= dwgname NIL)1 c3 s2 e4 [0 M1 N# Q+ ]# I" Q3 b2 r7 }
(progn0 y* S/ S% l$ G" @* I. n: G! T
(setq APP (vlax-get-acad-object));获得Acad 对象3 c7 ?( k8 `2 r" O( A4 @4 T
(repeat (length dwgname)
7 Y+ R) Y, T3 q2 u5 k" h (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
( P% f9 d- ~9 g/ e/ I3 M2 H (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获9 H7 I- D4 ^: S2 V- i& {3 h1 B/ E1 I
得其对象2 W( U: C" l- _0 A. A& d1 R
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。7 ?& G. {& P1 H! R7 \' C1 Q6 O
;; …: {- k9 y- j9 m. ^. x( L9 h8 a- V
;; …$ W1 x& L5 T$ I) H
(vla-close doc :vlax-false);关闭图形(不检查是否保存)
0 Y# _( l  m, }+ Q2 F7 _6 c (setq num (1+ num))
6 T9 C1 f4 p' }, q2 j! P )4 w! ^! }" J9 i# Q
(vlax-release-object doc)
- y' _3 s, U5 o, ~/ P( u (vlax-release-object APP)
( c5 K7 r- ]- S6 ]5 D )
  @5 ?# ^- k6 ~# P (prompt "\n所选目录中未有任何图形!!")
; U8 M  u; y% V4 ?) \- H" D: \$ s )% a. r2 r5 y4 N: @% W
(setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
  N' Z4 C% A3 p& F6 I( ?1 v8 k(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
+ Y3 n( S0 j0 D6 n! n$ V(princ)
- E9 ^' h9 i! g3 r/ I1 c4 a )
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    3 y' q4 |- S5 b
  2. ;;需要相应版本的ET(Express Tools)工具支持1 `2 i3 B* P, \' p
  3. (vl-load-com)
    . K! H7 X$ D0 G* N9 ?
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)3 W: ^: T$ y% n, k: p
  5. ;;主程序定义- m7 a! [& r1 m. \8 ~, g$ c( _' S
  6. (setq OLDECHO (getvar "cmdecho"))
    . G% {# O! e, P  @2 w
  7. ;;保存系统变量值
    3 V! }, L5 p9 W& K. w9 z$ Z! ]
  8. (setvar "cmdecho" 0)0 \: z/ d2 D6 b7 I2 C$ Q
  9. (setq path+ k$ X: o3 Z8 t& E& z* M
  10. (strcat
    " Y& r. r% C: y; ]- S' l
  11. (vl-string-right-trim. q, N  B0 @: {, X$ x
  12. "\"4 n& ~* T6 d' S* F, x( v
  13. (strcase (acet-ui-pickdir: y  ]+ p  ?0 {: g. O: m
  14. "选择目录"! G& y  i1 r/ s& c- X
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))- {4 e( y7 Y" `: r
  16. "批量修改"
    ! `% P6 u& a- s2 I& A  Z9 v4 k
  17. ). S% Y& Y" M, ^( f4 O4 V* w, m
  18. )/ }8 {6 t4 {( H' u  ^
  19. )9 B% E' l) e  ~% {
  20. "\"2 Q; F) t7 m7 q; m
  21. )
    , U7 ~  \: h9 [/ ^* r6 D
  22. )
    1 W2 K0 s& D3 E: ^* V
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))
    ; e$ ^$ A& S! E  I5 C  V
  24. ;;保存系统变量值, K1 S8 x* f1 M  Q/ ?
  25. (setvar "acadlspasdoc" 0)% w9 b* ]9 X, r
  26. (setq dwgname (vl-directory-files path "*.DWG"))
    + d0 Q- e! q. q9 o
  27. (setq num 0)
    2 S6 i4 M: b8 P9 Q) m
  28. (if (/= dwgname NIL)
    $ L( u. r1 b" l5 Z/ F) v4 c
  29. (progn
    ) }: r$ C& k! D" w1 A( y
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象6 g4 @0 L3 e4 O. W: z+ s
  31. (repeat (length dwgname)% r0 y/ e7 p. d: V( K+ ?& d( X2 l! d
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))4 s  G5 \* R# P
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))
    2 Y5 V% }" V' L% S: r' G+ K. j
  34. ;打开图形并获得其对象
    - E2 @0 N; c% J" O
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。' c1 n" o  i' Z3 C, p3 \  `- b
  36. ;; …: O9 |; E$ C' ?3 ^4 c+ Q- l0 A
  37. ;; …
    5 N3 n0 e! ~2 ?5 W+ P7 j! I# ?# ?
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)6 ]/ v. I- x! W, o
  39. (setq num (1+ num))
    3 M7 ^+ _- t& O$ x& z# e
  40. )" u5 H" o$ F$ c) E; q# G8 f3 _
  41. (vlax-release-object doc)
    & N- d6 X- C- O, G! P& y( {/ L
  42. (vlax-release-object APP)
    7 O  f+ }$ g% B1 N- a2 S* H8 m
  43. )  V$ J, c; h" n- U+ r4 z
  44. (prompt "\n所选目录中未有任何图形!!")8 b& d, p9 A5 J- N  o
  45. )
    * e9 b- E& g0 `/ S
  46. (setvar "acadlspasdoc" OLDLSP)
    ( Z3 x7 }- f. |. H) q
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了
7 r9 G* z1 Q% k8 `/ n0 A" _! h1 A! Y
你在使用中出现过这个对话框吗? Untitled-1.gif
0 \8 i! Z: ]/ U$ Z) k* Q: c2 O如果出现了,在其中选择相应目录即可.8 p; @# _7 ~0 _! |6 `
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!! b& U* v) p7 M; U3 {$ ^$ f! X
附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)5 V% S* R5 b8 q4 X
  2. ;;需要相应版本的ET(Express Tools)工具支持
    , j. V; ?5 N4 F
  3. (vl-load-com)! U3 m* X8 I. g. j9 Q: s
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)- r0 c2 s  t9 x5 E6 R. N- s" x( L# p
  5.   ;;主程序定义
    + l3 Z9 ^" c' A
  6.   (setq OLDECHO (getvar "cmdecho"))
    % J$ `$ ]0 x& a: A: V+ p) P
  7.   ;;保存系统变量值( b' k" w5 e' Z6 I
  8.   (setvar "cmdecho" 0)' r* o9 I, S3 {) P+ m
  9.   (setq        path2 V) y' D5 L9 a3 a$ a: r2 ?
  10.          (strcat
    , X. B, I* O# \; z  x* O; b1 t
  11.            (vl-string-right-trim
    6 s1 S9 f8 l$ b; @6 m
  12.              "\"5 `9 d$ t1 f7 C' q& C
  13.              (strcase (acet-ui-pickdir+ @1 j, P3 l& S% l
  14.                         "选择目录"
    . j* F5 z, I1 z% z3 S
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    ' h6 P  z% i- p& m# Y
  16.                         "批量修改"
    ! G  v0 P$ H0 R& {$ ^! u  C
  17.                       )5 i4 m3 I: h/ D' N, T( U- Q
  18.              )
    & F. e1 ?- e  ^7 i$ D
  19.            )8 }1 |  M7 M6 k5 m% r* c3 o
  20.            "\"
    " \7 A" c2 F; `# f+ Y* I
  21.          )) d4 N2 ~& o+ M
  22.   )
    : \( Y% h! D6 X6 V( b
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    8 h5 S$ E1 ?- K7 d
  24.   ;;保存系统变量值& K8 O, @/ @3 Y9 k/ Q; j/ I$ b) s
  25.   (setvar "acadlspasdoc" 0)* `3 F! x4 F' p+ z
  26.   (setq dwgname (vl-directory-files path "*.DWG"))* ?2 u6 Y( u0 h2 |2 w. c7 u( o
  27.   (setq num 0)
    3 \9 C6 \. O& K  c
  28.   (if (/= dwgname NIL)
    5 V* q% T2 a5 Z7 V& O3 T% C
  29.     (progn" }0 ~0 [/ S3 _" z: @* h/ w( J
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象- M7 H$ _* p9 x# A( e) L
  31.       (repeat (length dwgname)2 c" w6 S: e1 x/ d
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
    5 M2 V4 G# k# J; k. F
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))% F; l/ m2 H6 E8 Y2 {* O% K' T
  34.                                         ;打开图形并获! m- }+ X- ?" b( w
  35.         得其对象2 [7 A; `, J  C/ e# K* w6 S( m6 [
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。2 H3 y$ B# ?' Y- K" ^& |/ a7 N  s$ ]: }
  37.         ;; …  A, \( \0 j2 I
  38.         ;; …
    1 \2 q2 ?7 |, O4 M- |4 I# w. i
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)# D; H- U) h+ R; Z4 r* ~' W  e' H0 z
  40.         (setq num (1+ num))
    ( H( V5 u6 N9 N  ]* c! c6 a
  41.       )- G+ |6 }/ s" y( r; k2 J
  42.       (vlax-release-object doc)/ i" S. U4 {+ b8 V+ A: s
  43.       (vlax-release-object APP)6 ~' m1 N/ l: n
  44.     )' L0 k" \. |* i
  45.     (prompt "\n所选目录中未有任何图形!!")1 \) U7 p$ W" t' Y
  46.   )
      ^5 M  r6 Y2 U) s
  47.   (setvar "acadlspasdoc" OLDLSP)) x+ t$ {) i) T3 _
  48.   ;;恢复系统变量值
    . X; n% z/ z1 \! j; N/ g1 b3 E
  49.   (setvar "cmdecho" OLDECHO)
    9 A* ~: I! t" H0 J( U$ i
  50.   ;;恢复系统变量值
    - M6 C% t) {; Q  w+ q: V- y
  51.   (princ)% T' y5 Y- r+ m' t  k9 x* }  M
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则

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

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

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