QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!% ~* m% X! P2 ]$ T1 ]

) V0 d, D5 X! t, ?- m4 n& j! x+ T* g% A4 k! t" R
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
5 E8 q3 H) Q' C2 ~+ e(vl-load-com)9 P7 y) h' y6 g
(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent( ^" S( T% g6 z4 v0 i. t. q3 `
);;主程序定义" g- w) j  ~" L% O  M) |9 Z  c0 N
(setq OLDECHO (getvar "cmdecho"));;保存系统变量值" v% i  \7 M0 ^' U8 |- Q
(setvar "cmdecho" 0)% f1 f8 l" r$ p6 _9 D. p! s' p2 i
(setq path
1 {# V9 }. K' L% j* @4 [; I) a (strcat! L+ K: {0 N8 v' d2 ^' ^
(vl-string-right-trim
! Y1 z. S. B0 G "\\"
7 H( t4 |+ u2 F1 H" O  x (strcase (acet-ui-pickdir( @4 v; t( ]* s
"选择目录"
/ f; H; n' j8 s (vl-string-right-trim "\\" (getvar "dwgprefix"))7 ]6 L: Y) T/ X; h, k7 W4 B
"批量修改"
5 D/ s! ~9 \7 d( I0 t4 g )
& [4 N" m7 d% D$ q1 a" r/ o6 o )
( v: v& w1 u% t& N% _ )
/ [- U2 m  W. E "\\"9 o2 k+ [/ ^, L  V
)
( ^. t$ O% x: p& N  Z )
9 E  p3 g" a/ q+ L; Q (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值0 ~4 F! G+ A+ a4 J6 x% Y
(setvar "acadlspasdoc" 0)6 l/ B; P4 ~1 a, P: B
(setq dwgname (vl-directory-files path "*.DWG"))
# S% L/ x. u* M8 u3 g (setq num 0)' W9 ?! A" S4 O1 P0 M
(if (/= dwgname NIL)
9 S7 s: Z5 V9 _ (progn' A  s5 l! T# d( R, [' Y
(setq APP (vlax-get-acad-object));获得Acad 对象
: ?$ K+ \" N3 P  D8 ?(repeat (length dwgname)
- Y5 {! ]" M* x9 q: n (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
. _5 V- z* [% P7 |0 p& Z) s (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获
0 W1 B1 k7 i# I3 R5 i% s 得其对象
, x: v3 n- t6 L6 o0 _4 d;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。! K0 b% h5 T7 P$ R% Y
;; …" O# _+ X% C- l( X3 W
;; …5 D7 o- J- X1 C3 g" q7 t( H0 e
(vla-close doc :vlax-false);关闭图形(不检查是否保存)
/ b+ D) r4 X, s; j+ Y2 a (setq num (1+ num))+ |" T9 J# m# n9 M! v; X6 E3 a3 z: J( |
)
, K& r4 q) u/ l2 R0 {* k (vlax-release-object doc)
) [* ?, P) A& a! T' e7 Q (vlax-release-object APP)
4 }! r! g8 K6 i: }, r/ B( n1 J )! S  W6 @7 R1 Z, n. F
(prompt "\n所选目录中未有任何图形!!")) y+ K9 }8 m. |( i1 F
)
: N! m* o$ P, N2 H9 z$ |  r. z$ v (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
$ Y& i  O9 }7 W' Q* ^6 d9 g(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
6 T0 Y) u( g/ Z- T* }5 Y; g(princ)7 L% J+ H: C( S* ^2 b
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)6 D( g+ ^/ K5 e) c/ [1 E* u
  2. ;;需要相应版本的ET(Express Tools)工具支持
    . W+ x+ s* U0 o
  3. (vl-load-com)
    4 x9 y' f# T% ?2 ?/ P
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
    4 p; D- H7 q% E5 O
  5. ;;主程序定义
    , P* p7 r6 j0 y2 P6 A. L' k
  6. (setq OLDECHO (getvar "cmdecho"))
    8 r; H: a6 a! x4 G  k
  7. ;;保存系统变量值
    ' X1 c1 p& k6 }0 N) @5 f+ j
  8. (setvar "cmdecho" 0)
    : d+ Z4 @* G" S/ W9 H( ]
  9. (setq path2 M( x* E  b9 A, W6 N$ Y' f' A
  10. (strcat
    6 ?7 D% j) j4 k% j2 q: [" U" ~
  11. (vl-string-right-trim* e1 L9 [7 F) J  g
  12. "\", ~0 w$ x3 N' A4 p9 `
  13. (strcase (acet-ui-pickdir- X2 C6 T/ n+ S$ T" j
  14. "选择目录"
    : n. w7 E+ I1 D1 _0 y
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    ( }6 S3 [6 i! @
  16. "批量修改"" f0 T5 V3 a; J$ t
  17. ): z, [4 c& @4 S2 F5 I- M* y
  18. )8 \" A! W6 H: s
  19. )0 C' n' l3 d2 W/ Z7 |# S
  20. "\"
    ; u) O, y4 Q7 B- b# O: ^
  21. )2 u' I% X' q% W; c2 B
  22. )% X" {) y. f" S
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))
    8 a& K0 `- H. ^2 i, n2 r1 W; a
  24. ;;保存系统变量值
    # g" v0 N2 |% |* u
  25. (setvar "acadlspasdoc" 0)" z: O- J0 m( D, p5 L1 Y9 Q
  26. (setq dwgname (vl-directory-files path "*.DWG"))% R' f5 p: ?6 H0 f
  27. (setq num 0)
    . s; ^6 W+ j1 c+ u  R& _1 z# S# w2 W
  28. (if (/= dwgname NIL)
    9 M' k. k. E+ I# R7 Q5 O
  29. (progn
    8 j+ ~% ^7 h( w  j" ?5 q- \
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象
    $ I9 p8 P: y( y. N
  31. (repeat (length dwgname)
    1 a: G$ z) z/ q
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))) s: i5 j8 b7 I' ]- t$ q) F+ g; m
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))- y! ~6 D# H/ U
  34. ;打开图形并获得其对象
    0 ^* j- o2 j9 Z6 k
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。3 {2 k4 [' v; y2 h' H4 V" b' q
  36. ;; …
    8 R, c( [$ b' u& D! M- p
  37. ;; …7 F5 t# I% \) _5 J! l
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)9 {( _1 P( Z9 k9 b+ Y0 ]) U& z
  39. (setq num (1+ num)). `" @; a/ M% b  u6 w
  40. )
    8 S4 P8 j5 n" y5 l2 p: @
  41. (vlax-release-object doc)& f* F/ ^9 }7 s
  42. (vlax-release-object APP)
    $ }# X7 H; h5 R, e
  43. )7 l# y- k  e8 p$ i+ Q) {
  44. (prompt "\n所选目录中未有任何图形!!")5 C8 {' X* G/ H
  45. )
    9 |2 Y+ l* O+ x7 ]' i
  46. (setvar "acadlspasdoc" OLDLSP)
    3 B% p5 i1 e9 b' J  p
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了  R# N! Q7 b/ U9 [

+ K* E0 l& N' J! T你在使用中出现过这个对话框吗? Untitled-1.gif * t6 o) R* {% J. k+ F
如果出现了,在其中选择相应目录即可.1 Y3 I6 r- E% E9 J4 y
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
* t: r0 A7 T% B/ v7 \6 x附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)) l: ?+ c5 A$ O- n
  2. ;;需要相应版本的ET(Express Tools)工具支持
    . K$ R( s4 E0 q+ l
  3. (vl-load-com), J3 r9 C/ R1 P3 s
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent): D0 C9 [* _3 c6 m( p. k% x6 r, @0 p) M
  5.   ;;主程序定义
    ) c9 ~/ u; S* m' B: Q5 y+ e
  6.   (setq OLDECHO (getvar "cmdecho"))
    1 }5 ~0 Y( n7 Q8 e& `! x: f5 [
  7.   ;;保存系统变量值
    3 q4 }1 Q$ W% ~  K9 H+ B# ^4 }0 p
  8.   (setvar "cmdecho" 0)
    5 n$ h2 r! L2 s# g+ c1 B2 M) ]  N
  9.   (setq        path0 m* W% q. Z( q5 ~8 R* @
  10.          (strcat5 w; }7 p; x9 i7 U6 v
  11.            (vl-string-right-trim
    3 Q+ K' D7 |$ n; {; {% M
  12.              "\"
    ' W8 X0 @; d* J3 j
  13.              (strcase (acet-ui-pickdir
    $ L3 G9 k2 V$ s3 W) [' k8 i
  14.                         "选择目录"' g: C  H  V; ~" Y5 s
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))# V! W$ H- g4 ]  A- f0 O* q
  16.                         "批量修改"* [; G8 |9 j! d) t
  17.                       )' X5 r9 t* g  k8 o
  18.              )9 h; M6 E9 q) a( l" r
  19.            )
    4 F6 ^3 E+ Y  ?
  20.            "\") W/ y& \5 c* G# e$ R, v* L
  21.          )- G/ A! c9 K( j- R$ Q
  22.   )
    9 i6 n  o: P: X
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    ! j% b; L- ^- ?4 M, d) K
  24.   ;;保存系统变量值
    3 U3 r5 h, i+ K( r' l- a# D& p% \, H# w* @
  25.   (setvar "acadlspasdoc" 0)
    + M2 X* Q  {5 B) K
  26.   (setq dwgname (vl-directory-files path "*.DWG"))3 Y& @6 y" D* u- P, K) |
  27.   (setq num 0)( i7 r# W) X. u1 P* T( w* I+ G" H  f
  28.   (if (/= dwgname NIL)
    5 \) V8 K. ~) T* _3 {
  29.     (progn
    % O. i( g/ \. p0 ~* Y6 z6 S
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象
    ( L8 N: ]9 g  O
  31.       (repeat (length dwgname)
    ' [; g2 r8 p: @
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))4 C, o/ u2 s- U' E3 {. b
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))) q# Z  o# t9 P5 \4 X
  34.                                         ;打开图形并获
    + d4 S, W& S( w6 x% l4 r
  35.         得其对象
    0 F  ^( k! E8 f0 [
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    8 Z: c/ W% n% |* T. ^4 ]
  37.         ;; …. s1 C2 h% I) L! w0 }
  38.         ;; …5 m2 Q1 f# p2 a/ J9 A* X# T
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)
    , K2 K9 i/ Y+ G2 U' A
  40.         (setq num (1+ num))5 f: K1 W& C$ ^. L4 R
  41.       )
    3 n1 _. g& D) D7 R7 K- q
  42.       (vlax-release-object doc)& _% N! s7 G+ n4 J1 d
  43.       (vlax-release-object APP)
    ; }0 I* O) J  \4 M, i
  44.     )
    % P" ?' g, u4 X9 |# Y( S
  45.     (prompt "\n所选目录中未有任何图形!!")
    0 e' _2 a& Q+ m" O. U
  46.   )) B5 g- ]. {- j+ L: P
  47.   (setvar "acadlspasdoc" OLDLSP)
    & C( z" `, c* K$ R9 z
  48.   ;;恢复系统变量值2 L! ~; ~6 i8 Q# v
  49.   (setvar "cmdecho" OLDECHO)
    7 K! t: K: k& I/ u3 y5 x9 j/ D0 Q% w) U( ^
  50.   ;;恢复系统变量值5 l; L3 x8 ?1 M  W! V
  51.   (princ)8 e( N- K- T& m0 m
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则


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

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

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