QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!/ L- |: [' U* r7 j' J; n* R4 S

& O$ c6 i3 S& e& N# s! z3 I# \3 [/ }' x2 r" Z* _
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持2 S$ Y# W; Z: Y6 P& T9 _% m
(vl-load-com)
/ y! n! ~, c& @) \' O5 |& w (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent! b9 |6 e5 D. R( K' c
);;主程序定义* M  t8 \- b6 ^3 o) K# m) V
(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
" S; W$ D1 [* N  f. H! x(setvar "cmdecho" 0)6 ?; e* |/ ?# R2 m' Q0 C) ?1 \
(setq path. y/ \) l8 A& \  c& h; \+ M
(strcat& e; v% L" H( h) @6 y& p. V& ]5 }* m
(vl-string-right-trim% u7 y1 [$ V8 ?9 D) _# [/ ^
"\\"
0 q* G# v. C; j# f! n (strcase (acet-ui-pickdir
, F& [# I& V! a0 X "选择目录"
+ @3 G" v  A# I5 ?- @# I' i/ R (vl-string-right-trim "\\" (getvar "dwgprefix"))4 A# E3 X- ]4 M6 ^
"批量修改"
# t! O. e/ e2 A7 { )
9 g9 S3 I7 d6 Y ): y$ g0 L+ y" f- E8 c6 R! T
)1 ~" m. b( m& l" n
"\\"
& Z* p  z0 S) D# t! c )9 Y* b! b% p# S8 M5 U) a
); K9 B5 D/ x7 H1 Y% z( \5 C0 X
(setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
" l; h' |+ y/ F% i  X(setvar "acadlspasdoc" 0)
8 M3 x4 G0 r  M: j (setq dwgname (vl-directory-files path "*.DWG"))" f# W6 W9 K  w9 v4 O
(setq num 0)
# S# p6 L; G3 Y (if (/= dwgname NIL)/ _% F, J8 E, [& ^
(progn6 ]' u* }7 A& |1 h' b! Z7 s
(setq APP (vlax-get-acad-object));获得Acad 对象
5 n( i$ {+ d) z4 B+ p0 y. U9 _(repeat (length dwgname), l  S2 h- A$ X" j5 Z
(setq DWGNAME2 (strcase (strcat path (nth num dwgname))))9 t( \" p7 l" O1 ], J- j$ W
(setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获
# ^& L  e: B& u9 |+ h- L 得其对象6 h) F3 i# O  o' V
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
4 {0 b& D7 w! G- |+ R;; …+ _' N5 G4 F' s; Z+ C% }5 M
;; …8 b* g& V* E/ V1 ~1 O$ ]- I# Y
(vla-close doc :vlax-false);关闭图形(不检查是否保存)
3 [8 t+ ]1 h. b! J5 x (setq num (1+ num))
7 |% C' `& i, \- L )
% q- i' x' [3 X# P (vlax-release-object doc)
6 ^8 i& J( ]+ J (vlax-release-object APP)
, `$ g; M  k* e0 \0 N )  I% {  U( Q' o5 ?! e5 y
(prompt "\n所选目录中未有任何图形!!")' d3 S& w" h, ?- {+ `  X) f
)
% h# d7 t, Y. z7 \  [2 R+ L (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值: F' g6 g& A% M9 y5 T
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
  [/ d% \' l: i' {6 d(princ)2 @4 g$ w! n0 q# ]
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    - O+ `) ~5 w% J  s0 p
  2. ;;需要相应版本的ET(Express Tools)工具支持
    7 E9 b) i; t1 a* [$ l: p: Y
  3. (vl-load-com)
    9 R+ X6 X- j  g" t3 l" i
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent). x7 v" b0 d# z) f5 w
  5. ;;主程序定义( w& c9 g- E. s  g0 \# c% |0 X
  6. (setq OLDECHO (getvar "cmdecho"))3 L# p! [. g; ]2 S
  7. ;;保存系统变量值) x8 a0 `& n2 X2 q: U2 j* i- p9 a
  8. (setvar "cmdecho" 0), Y1 v. \. [4 F# p
  9. (setq path- o( y6 O; h; F* }
  10. (strcat7 s3 a4 c  H- g5 g! j1 f% W
  11. (vl-string-right-trim. c5 ~* z( o- C, J
  12. "\"# s( g' V/ [7 ]+ s
  13. (strcase (acet-ui-pickdir
    : E* [7 Y3 N- Z3 {5 F$ R2 ~
  14. "选择目录"
    ! `0 V0 p+ P5 O4 Z8 f: y7 V/ `( w3 C0 I
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    # }. T2 U, n' I+ Q5 B0 F
  16. "批量修改"8 G2 K! v* ^$ m0 j  _9 C2 c
  17. )
    ( V! @$ Z! {# w& s9 m
  18. )
    . @+ ^+ \  ?9 U3 B7 l
  19. )
    3 G$ M* E. W8 U% U: M/ [
  20. "\"8 i$ g* _  C% s* w' [
  21. )% ~7 M0 N7 Z" y
  22. )
    : P4 v9 c4 ?. ^/ n* j( Z6 [2 w) {
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))4 z* O- E& c9 N$ l; T) E
  24. ;;保存系统变量值
    " n- d4 i, b- @" S' ?3 M
  25. (setvar "acadlspasdoc" 0)* d' Y# n1 q* N* X5 F( _4 j
  26. (setq dwgname (vl-directory-files path "*.DWG")), y+ C! c& D+ z( A5 P
  27. (setq num 0)1 a$ Z- {) y" \7 _  B+ i
  28. (if (/= dwgname NIL)
    ; N" F% V$ A, g% N3 d
  29. (progn, t4 D" S* v( f/ t1 [# `# n
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象2 u5 C8 p: X' y+ d1 z% p% p6 H! T: [
  31. (repeat (length dwgname), {6 T  J% b( D9 c& @
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))4 Q5 C: w. S3 Z2 i7 `
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2)), o" _1 B2 C8 A# V6 P
  34. ;打开图形并获得其对象
    ' r2 W5 X0 |$ w4 T7 O
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    4 x$ [! |# N# P* g
  36. ;; …
    . X5 |. u& Q6 b* [7 y1 ~
  37. ;; …# L8 ]/ x" U- ~0 c# H2 E. a( a- b
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)
    ) h/ Q2 P* K& H& ?8 P3 O3 p8 q! q
  39. (setq num (1+ num))
    / X, M( l8 \6 ]+ u! U
  40. )
    5 D5 }% g) Y8 d) Q6 K
  41. (vlax-release-object doc)
    % ?/ O0 a' c( i% L
  42. (vlax-release-object APP)0 q. L5 C/ c  t3 `" W3 X- W: e/ U% U
  43. )
    0 K  V' D( ~9 h3 P$ x0 K
  44. (prompt "\n所选目录中未有任何图形!!")6 R& h+ C2 C  J  R4 {/ z
  45. )
    & g8 Q& t" t" Z- a
  46. (setvar "acadlspasdoc" OLDLSP)
    0 H% e+ r3 z1 Y
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了- J' T3 P" {+ z
& t4 @2 N! _5 O# r$ p
你在使用中出现过这个对话框吗? Untitled-1.gif 4 [# v" R+ p% X* N: q! m9 R6 p
如果出现了,在其中选择相应目录即可.) d/ {4 i" R: k. q& s0 w* L: F
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
1 I8 D. x* J- Q7 j' X附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)9 f7 v1 D% q7 v3 k- [
  2. ;;需要相应版本的ET(Express Tools)工具支持
    3 y1 \7 y! E. @( Y6 J
  3. (vl-load-com)
    " J7 A- h( m! l# H0 ]
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)9 y2 _6 D6 g& x- `8 `( P* b- s
  5.   ;;主程序定义0 Y' u$ a( y! ^4 V
  6.   (setq OLDECHO (getvar "cmdecho"))% |, e9 q0 f1 {# ^( P4 x
  7.   ;;保存系统变量值: |  K& [# c  q: L5 m; C( G
  8.   (setvar "cmdecho" 0)  a& M+ E7 O0 z6 M
  9.   (setq        path4 l- _5 }/ l, O( D0 @$ x0 k
  10.          (strcat
    : y& L8 w/ x: i, x! \' q% ?3 K5 z
  11.            (vl-string-right-trim
    ( Z. @, e$ h' z9 n
  12.              "\"4 k+ K: c6 L8 \' [. l- y4 `: ?) ]4 @
  13.              (strcase (acet-ui-pickdir+ F& n! k4 s$ a) a$ t" t
  14.                         "选择目录"" Z6 `" z+ \; m( p: l7 R; }
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))" H2 g1 N- p( Z' B' Q+ H& Z: U
  16.                         "批量修改"
    3 ~/ E! b7 y( V0 t# ]! g" Z
  17.                       )8 |) z& U4 N- t
  18.              )' b$ s) x  s: Y. C7 a/ V
  19.            )
    1 i9 C) t* ^, G* _3 U$ b
  20.            "\"" J( v3 I8 y& E
  21.          )4 @; P: ?; N/ S+ M$ H
  22.   )
    % o! Z) k/ b0 @: S0 o
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    # P) k; ]5 {3 [, E$ S0 b
  24.   ;;保存系统变量值
    0 s( x5 b/ m7 K% _  u  I
  25.   (setvar "acadlspasdoc" 0)8 B' V. D9 b5 u! ]4 g$ {1 i
  26.   (setq dwgname (vl-directory-files path "*.DWG"))& C* }& A) I& M$ l$ e" U( K6 t
  27.   (setq num 0)
    5 ?+ Q6 _) `! i; n; c
  28.   (if (/= dwgname NIL)
    ; c/ ]8 ~8 I: D$ A# \
  29.     (progn  @9 ]' \+ Z" D+ [& M# C. t
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象" C" s! F9 h- w0 {$ t' P) d
  31.       (repeat (length dwgname)
    7 m. s) Z* N) T
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))$ l1 D2 t) Z2 K! Q
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))
      p3 J9 W! U  \2 y! X9 Q
  34.                                         ;打开图形并获6 Y5 g1 z& q, \  V+ {! f
  35.         得其对象
    ! T4 Z3 i. @5 }1 l) Y: Z
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。) K( ~$ c+ S4 t
  37.         ;; …
    ! U5 u7 u& r( y# f  J: M" c' L% ?
  38.         ;; …
    + U* m% t' T' `/ G2 B
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)
    . p! _+ O  v' ^# w8 O
  40.         (setq num (1+ num))9 V# V4 U5 M; b% v+ j5 p% S5 R' b
  41.       )
    4 M' ^$ J( }# X8 c3 v2 r5 j& c
  42.       (vlax-release-object doc)3 ?% L" p& g& L1 U9 k  `
  43.       (vlax-release-object APP)
    / C9 y8 e2 M# g8 A* R
  44.     )
    6 K9 O5 x8 v5 |" n6 e
  45.     (prompt "\n所选目录中未有任何图形!!")8 q0 w6 V5 L! ]2 r! t+ e
  46.   )( t* n* t( e& t
  47.   (setvar "acadlspasdoc" OLDLSP)
    - t6 R0 }0 J* M1 p+ o6 p
  48.   ;;恢复系统变量值
    0 J: \" T+ r: o9 }( ^
  49.   (setvar "cmdecho" OLDECHO)
    2 r. |9 N9 w' A
  50.   ;;恢复系统变量值
    - X" Q) \. L; u3 i
  51.   (princ)
      r2 O# E" |+ y( Z
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则

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

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

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