QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!+ p* d& [% L# w, g, I9 {; M

! d0 ~  i* I2 G, y7 D6 [" j5 _, g' n5 f( p0 Z- ]* N& _$ R
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
% D; N3 v; y) Z(vl-load-com)3 T" @, @% M% L+ l
(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent
% r# ~/ c) Q; W );;主程序定义
! h4 ~+ U  s  G8 m8 J; S/ _6 j(setq OLDECHO (getvar "cmdecho"));;保存系统变量值$ {; W- \6 D' @. E" t: q  U; S
(setvar "cmdecho" 0)
' j3 G4 |2 P8 q2 N" o; ] (setq path
& g" @4 w# w7 w7 c+ B! J1 X (strcat6 v) S/ E. O# ~2 U8 l1 s$ _; H7 y
(vl-string-right-trim$ d1 S6 H: C  A5 a' d: _5 ^2 A- p
"\\"
0 S0 s9 O$ h- X# l (strcase (acet-ui-pickdir+ m5 d; Y, F  p/ {; J
"选择目录"+ d0 Y0 `9 V' s& u5 e$ `
(vl-string-right-trim "\\" (getvar "dwgprefix"))
: ]8 K* R( P+ T2 v "批量修改"7 E3 E6 R$ @8 U  v
)4 d- A6 l1 X, R) {) ~1 A
)% F/ a3 M; b& j* f, }7 ^1 b0 ^
)3 X$ [# S5 x' k! C4 D6 v( D9 R
"\\"
8 a/ T1 Q: C# ]4 |4 e) U6 k )) v. `# H& i3 S, i2 O2 t+ L+ f9 Y7 P
)/ R" Q, `. z" S) r& t
(setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
' Z0 m/ k7 r: x(setvar "acadlspasdoc" 0)
* j& d+ d8 _: y% z" z (setq dwgname (vl-directory-files path "*.DWG"))" n7 q3 Y$ Z. h* N/ S0 }4 _* A
(setq num 0)
) X4 ~) @# l) n6 R! T' S# f% V (if (/= dwgname NIL)0 j; ^- u( U$ w+ D2 q! z( m
(progn
6 @" D: c- P, _! ~) a' g1 c (setq APP (vlax-get-acad-object));获得Acad 对象, R0 a$ C  G# Q7 h. T+ H/ x
(repeat (length dwgname); r3 D2 |( A1 o6 ?, ^
(setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
$ j7 K' _& u3 H5 ^% C/ P (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获
6 \( S1 p3 y5 {- @9 |: [8 g: V 得其对象1 f& X( A( q( ~4 @
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。2 j" r4 U; [8 S( B" a: Y' Z5 M/ J' V
;; …& B: l, C, I7 C8 o) H0 Y  ~1 F
;; …
# l6 d( q0 a. O' f(vla-close doc :vlax-false);关闭图形(不检查是否保存)# o' v7 @9 P7 c+ q' \& P
(setq num (1+ num))& ?9 H5 }8 w5 @, v) C, Q& g1 j
)% Y6 W. i1 m4 N: b
(vlax-release-object doc)) h7 q: H7 A5 ~8 O: g
(vlax-release-object APP)! K- S* F3 m- J( }
)
$ F8 v* o4 V; h# M (prompt "\n所选目录中未有任何图形!!")
) r5 T, L% G. ^9 v )
& h8 h# }. r# H  J! k  q( ]7 n+ j7 {! m (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值. L' ]# @/ h! z, U- i5 Q% J
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
$ a# b1 l: x+ x(princ)5 o/ e9 ~5 u# K: ?+ U, o- m, y
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    % B% R7 _2 a; C+ e/ ?2 z- n
  2. ;;需要相应版本的ET(Express Tools)工具支持  ?- k( R; `- [* e- r
  3. (vl-load-com)
    . x( K( H4 M' q- F
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
    3 c. J4 n- H) m: x! f4 P
  5. ;;主程序定义3 g4 V& D: }! K; J! ]
  6. (setq OLDECHO (getvar "cmdecho"))
    + t9 @! ^0 v2 U- v9 ?
  7. ;;保存系统变量值1 _, m9 |- |# }! I  l
  8. (setvar "cmdecho" 0)
    ) _4 G' V+ h! s
  9. (setq path; \+ }: H; C7 P/ L( w
  10. (strcat' _8 ?% A" b+ ?- t. J& W1 b+ E- f
  11. (vl-string-right-trim0 s' W+ `$ N) r# s+ b
  12. "\"4 H( \7 Z% r# s: v5 a/ {3 W) H
  13. (strcase (acet-ui-pickdir
    5 s+ F8 l, B1 Y3 E" y
  14. "选择目录"
    - m; q0 ]* e! R! j* a- w5 ~( N0 [
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    " f6 r9 `) `1 Q# f# s
  16. "批量修改"
    " d+ J1 G( M8 i; r
  17. )5 O$ [) S3 }# ^
  18. )
    7 o8 B# _! g2 i' F9 P: m/ P1 H$ V
  19. )
    0 ^& F4 X$ u  w  i; E" g- C
  20. "\"9 D& o: C- V7 k4 }
  21. )
    + A. X, P$ @7 h  t7 F7 @5 G2 i! W
  22. )+ b; J. f, v( _: v# g0 b
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))8 V. }8 m8 ]4 G+ [! ^# I
  24. ;;保存系统变量值% E) F; {0 J1 ^4 a3 Q- m
  25. (setvar "acadlspasdoc" 0)
    % W4 o( U* ~% u+ Y6 K4 H
  26. (setq dwgname (vl-directory-files path "*.DWG"))
    % X# d3 K- |5 _+ r/ V  H8 h( q$ @
  27. (setq num 0)8 f: y7 P4 l9 Q% [1 C3 [. C
  28. (if (/= dwgname NIL)3 D/ x$ {: E% p5 n8 ]% G
  29. (progn' ?, e/ e4 C% z9 p+ q% c
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象
    $ Q7 J  G% i$ v4 J: H- G0 \0 O
  31. (repeat (length dwgname)
    8 v1 }2 p/ g4 x
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))3 Y( e% ]' O+ @: l: _6 [* }! R, b
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))6 h4 `9 Y3 Q; q  b) `
  34. ;打开图形并获得其对象6 I) [$ _) \" f) R2 T( V% y
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    ; z, h6 q) I+ `) f
  36. ;; …
    / p# s$ M: U" V& N( Q8 U
  37. ;; …
    3 b1 k5 q. a5 y
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)3 p7 `& r8 a( \8 y  `: R5 \
  39. (setq num (1+ num))% Q6 o3 {$ f/ X
  40. )
    1 B( K; {, _5 ]2 D5 g
  41. (vlax-release-object doc)
    6 e& p" d. M# g, L: B/ G
  42. (vlax-release-object APP)
    ( f( Z/ \  T( a6 c
  43. )
    8 S5 u  N/ }! U
  44. (prompt "\n所选目录中未有任何图形!!")- B3 _+ r# X# F& d% e) ?
  45. ), d) K3 L: H- S' L4 i* X% o9 P
  46. (setvar "acadlspasdoc" OLDLSP)! _1 X" a9 B' q+ i
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了! l& ?& C6 W! [( k, \* o

; l6 Z3 t9 _" R& m! S3 e2 g你在使用中出现过这个对话框吗? Untitled-1.gif ( H: ^1 @+ ~8 J" ~% c
如果出现了,在其中选择相应目录即可.
& Y* ^8 \" r' \2 R如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
* L( R' }# f' ?! j附件中上传原程序。
  1. (arxload "acetutil.arx" NIL); \( T9 d; L" l- l6 {# a
  2. ;;需要相应版本的ET(Express Tools)工具支持: T4 Y7 @+ q  @8 m6 Q
  3. (vl-load-com)
    " ]/ V4 c" B* q- v, y8 ~+ G0 U
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)
    " c  r& N, x% c/ z
  5.   ;;主程序定义; `' _# E( _' `
  6.   (setq OLDECHO (getvar "cmdecho"))0 b* Z9 t: e. G0 _0 |
  7.   ;;保存系统变量值
    / ?3 E, _0 c/ p+ C) e% U) c
  8.   (setvar "cmdecho" 0)
    - `) r% ^4 ^. |+ H5 F
  9.   (setq        path
    1 R" N6 d6 t5 v& }: @8 m
  10.          (strcat
    + l% ]6 Z6 g' E
  11.            (vl-string-right-trim
    4 Y8 M/ B  l: C& `% J4 S
  12.              "\"! w- V# ^# A8 _& r" w! b' t/ l
  13.              (strcase (acet-ui-pickdir
    3 ?; n5 K7 j3 ]5 K' u% Q
  14.                         "选择目录"
    : _7 s& O: K; X, @& C, R  F
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    ) a3 C; E+ x3 ^# B
  16.                         "批量修改"
    / S/ H6 M1 h8 H7 M" t
  17.                       )7 p& _2 H5 x7 n  r4 J* U9 R& Q
  18.              )
    7 z' v* t/ O$ t
  19.            )
    3 f1 P) _* T9 E/ j  n
  20.            "\"8 F/ G. S. D; w9 e' L4 }
  21.          )
    ' m! E, S1 ]1 z
  22.   )& x8 o5 m7 C/ l
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))( [0 e" m2 `- f) e* x
  24.   ;;保存系统变量值
    ; p( z) A7 w) V# D' d
  25.   (setvar "acadlspasdoc" 0)
    / Z( I5 \! V6 R8 I
  26.   (setq dwgname (vl-directory-files path "*.DWG"))
    3 `; i" F' p) R$ l: J- s8 t
  27.   (setq num 0)
    6 B! U- f7 e8 r6 a" Q/ B
  28.   (if (/= dwgname NIL)
    * o+ B* B) S$ t! e
  29.     (progn
    " P1 ]- @& K9 H
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象
    9 ]0 {+ E: N6 {* h6 v( T
  31.       (repeat (length dwgname)
    ; F$ _3 p- t8 ?, l1 F
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
    & h: q) z* n. v
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))
    / Q  J6 Q9 z8 a) @7 d5 z3 G. ~
  34.                                         ;打开图形并获
    , d! G9 I+ k3 w& `) ?+ k1 G
  35.         得其对象
    . m( y  b+ i2 ?; w) ^4 [
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    ) R' T4 o$ X- w+ o- S
  37.         ;; …, g: p8 E) o! j$ M, a5 y  A
  38.         ;; …
    6 i0 W+ u. V8 Q+ b3 V
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)7 ^4 I2 `: ]6 ]' f8 B
  40.         (setq num (1+ num)), D8 _2 _8 Y, x+ b6 V4 L
  41.       )9 Q5 L, {3 U7 F/ `! z+ F
  42.       (vlax-release-object doc). q7 D7 G! f7 K6 w# {4 `+ w% w- F
  43.       (vlax-release-object APP)
    ) h0 D" H; m* N+ O
  44.     )
    " @- m  O; _/ q/ s% V* @4 X  y
  45.     (prompt "\n所选目录中未有任何图形!!")
    ' X  H; B" u; E8 ]- b" _- R
  46.   )
    4 W+ V9 x- V; H; f4 O
  47.   (setvar "acadlspasdoc" OLDLSP)
    ; z1 {0 ~' x/ E. t
  48.   ;;恢复系统变量值
    , J9 E6 Y% U4 s0 f" ]
  49.   (setvar "cmdecho" OLDECHO)5 i& w- {6 L5 l3 M- v8 |( P( h
  50.   ;;恢复系统变量值
    6 z: _* z! n- ?+ Z$ B) D2 |
  51.   (princ)
    & K* b6 n  r) I% G3 @5 c
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 16

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

本版积分规则


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

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

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