QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

3 M  v6 H6 _! i
7 z+ S) ^  Q4 B- F+ M. S3 P* y
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
6 q$ ]; P6 P3 `6 d0 x5 B4 z8 }(vl-load-com)
0 K9 j" E$ k- \4 C8 p9 e9 ?( Z (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent) ]) u; _" O( v) _( Y  e( I2 {+ ^
);;主程序定义
1 u$ U- M; v+ ?2 ]' {5 L( H; E6 M(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
  a! o  ~# e/ L1 y- {5 Q( [9 Q(setvar "cmdecho" 0). I. f) [- F, ?7 D& G
(setq path
1 p( x6 P- S9 L (strcat
  B1 K. y; P/ T2 H" o0 f (vl-string-right-trim
. d8 s9 {1 D0 n2 x "\\"/ Y# J. L4 e$ Y8 {4 w
(strcase (acet-ui-pickdir# E0 Q0 Q0 u* v2 Y, D) i
"选择目录". A' |' G4 n* u8 n5 e* _# g) n" u
(vl-string-right-trim "\\" (getvar "dwgprefix"))
* |  y; Z$ o; e! X/ o3 ^ "批量修改"
' o6 X* N& M2 S: c8 l* Q )! P+ M/ j1 x, Y( U, l9 H4 o8 i% d
)1 U; K( e7 m0 _7 `
)
: A3 C+ b8 k0 D) T9 y: C "\\"
, q( T2 p5 @' \0 F- ? )
7 n  p7 B: m$ Q' a- z ). Z( M" {; M  [
(setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值: {. |1 B. S) D
(setvar "acadlspasdoc" 0)) g: B. t5 Q8 C" N+ p
(setq dwgname (vl-directory-files path "*.DWG"))
' d  q6 y4 W! \- S, r (setq num 0)! S3 ^& c* z% p7 q# Q, S7 w
(if (/= dwgname NIL)) }" i5 p) f3 f" M
(progn$ J& H& S* J$ ^2 m
(setq APP (vlax-get-acad-object));获得Acad 对象
6 {9 A& c' ^! k. V/ g(repeat (length dwgname)
: q" b2 X! s  [9 `. d (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
( {; b1 W5 {9 l6 o1 w7 c (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获) ^$ |: Y: c0 J0 I! P+ i( d% T
得其对象
6 b7 S8 Z& [  I9 O% _  l;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
+ m* x/ P* f$ m;; …
/ B  T& j  Q6 s3 Y+ I7 s. v/ n& @$ y;; …
/ S* G1 H) w% Q9 o0 R& i7 p5 ^" u% N% K(vla-close doc :vlax-false);关闭图形(不检查是否保存)2 @3 R3 _$ S4 ]  O
(setq num (1+ num))" F% m! @0 ~  z! x
)( _4 [$ u) c; O+ q! s, v
(vlax-release-object doc): ?) i  {& q" y
(vlax-release-object APP)# p9 L$ {0 }; g8 E
)- K9 f* u+ c2 b. J
(prompt "\n所选目录中未有任何图形!!"), x+ [0 e4 t: h  A( W9 `
)
) N+ t: k, L7 I. `. I (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
6 @: {6 U" F6 l# G(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
- m# Y% q  {! o(princ)
. T: h! @: o1 e; w# Q2 [ )
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    5 \, p9 ?1 `: e' o8 z+ c8 N
  2. ;;需要相应版本的ET(Express Tools)工具支持
    7 B9 c0 j$ O( {8 ]% s7 b6 ?
  3. (vl-load-com)* f, ~3 Y: y' M( T. v/ ]9 Z6 x$ L2 f, J
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
    . u; k  y! w" Q; {; N- a  e& W7 G9 z
  5. ;;主程序定义- |6 ]  `2 G2 R: U8 y
  6. (setq OLDECHO (getvar "cmdecho"))+ X0 |  J- |- a0 l# z8 m
  7. ;;保存系统变量值
    1 J+ z8 M+ `: }: l6 \+ N
  8. (setvar "cmdecho" 0)
    7 l, c1 j0 [7 ^% R6 u) L
  9. (setq path
    ' V" Y% R  I" ?4 Z  b
  10. (strcat+ D- y" t( A/ S4 O6 b, l% E
  11. (vl-string-right-trim) d/ H+ [5 n4 w
  12. "\"
      W8 [9 L( J+ J+ ]+ D
  13. (strcase (acet-ui-pickdir; i7 l+ w; J' m/ a7 P: p6 j4 L7 a) A
  14. "选择目录"
    ; P, J5 O" B6 A+ S* L0 j( O
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    # t; t3 q7 W7 S3 m( N- r
  16. "批量修改"( b" A) \4 l6 y9 M7 U
  17. )
    ' g. S" D' ~8 x1 V. J
  18. )% h, a5 \0 u9 v
  19. )7 Z$ x  Z5 t8 X5 o
  20. "\"
    ( \' @5 m! B  V$ W
  21. )
    ( h/ p& \( ?4 g4 a
  22. )
    ( ~5 ]7 ?& k, L1 A- Y" L
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))  ]% }, u/ Z4 C
  24. ;;保存系统变量值
    0 f0 e. C3 i" x6 ?9 ~
  25. (setvar "acadlspasdoc" 0)
    ! W; q- `' h. Z, {2 a5 y
  26. (setq dwgname (vl-directory-files path "*.DWG"))
    9 y- Y. w( C3 i" c$ g: w* u
  27. (setq num 0)" x+ u3 g* I9 Q, j) l
  28. (if (/= dwgname NIL), W, a7 x5 `& N* ]/ v
  29. (progn. Y8 M& P( u& V7 h9 v
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象
    - N; t" @5 h" j0 M2 _
  31. (repeat (length dwgname)" C& C$ h. S- x9 X( D. o
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
      s' y8 l$ S7 E* l9 h0 B) ]
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))( q2 ?& |# p* h9 z+ v7 V% [% C
  34. ;打开图形并获得其对象& F, k. ^7 [( H% E2 B) k/ L: c6 _$ l  H
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。+ C# T8 p$ W  Y3 n; ~4 H; a
  36. ;; …
    0 a5 E0 Q. @- l  v' I9 h9 E
  37. ;; …1 f& j7 D3 h) H( S4 S" d
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)) O: P" E2 R/ G, O- v2 a, o
  39. (setq num (1+ num))5 _! D+ q! ]$ \& a
  40. )
    : ^# v5 t: P- o; S, z0 a" E
  41. (vlax-release-object doc)
    6 Z3 i3 v( l& K6 C. w
  42. (vlax-release-object APP)
    & ]& h. f/ l$ L% x" m  H- _
  43. )4 _4 B1 C2 S* x% o  S8 x
  44. (prompt "\n所选目录中未有任何图形!!")
    2 k4 K& c2 l: L; K
  45. )0 O" l& [1 g% D4 ?
  46. (setvar "acadlspasdoc" OLDLSP)
    ! w+ X& a/ \! t& J* T/ N
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了, ^7 j/ A5 N3 w  P; C6 a+ |
2 t  [  g3 z& q; ?% d2 Y5 D$ Y
你在使用中出现过这个对话框吗? Untitled-1.gif
7 s/ B* o' `( L, [9 F, K! D* w, V) ~如果出现了,在其中选择相应目录即可.
* d! s( z# h% n+ q. X. a如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
, y+ Q+ P  F& D4 ^附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)& f# x4 L3 u. Z3 H
  2. ;;需要相应版本的ET(Express Tools)工具支持. e: O! ^9 d5 [/ {
  3. (vl-load-com)
    ; M/ W) A0 s, m' w
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)' M) \( Y' c$ _8 s) {1 G
  5.   ;;主程序定义
    & Q9 w) Z4 u0 H' o
  6.   (setq OLDECHO (getvar "cmdecho"))% L( @4 w" D* i. X8 J
  7.   ;;保存系统变量值
    , d# ]( _% _3 }& p, X. _8 v! |. B
  8.   (setvar "cmdecho" 0)5 B! d/ D7 {9 X7 a$ I
  9.   (setq        path
    ( s" i2 ~# x8 r
  10.          (strcat
    9 T! q8 p& ]" t+ V9 W) @0 l) a( ?
  11.            (vl-string-right-trim
    + t  a' K* C) Q* ~" B" J5 c7 p  q" t
  12.              "\"
    ! u1 d9 q3 F* [( n" S5 g5 N9 @
  13.              (strcase (acet-ui-pickdir$ E! h. M3 Z, Z% H' A: z. e
  14.                         "选择目录"5 d' e& C% e( @6 {; p: W
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    ( f8 ~! V0 P: D. q
  16.                         "批量修改"9 |: E: s; j' n1 S4 r0 `
  17.                       )( ]9 C1 T$ n" \7 D+ Y( Y* R# s2 L
  18.              )4 G+ Q& U7 [  l+ a# i" Y+ J
  19.            )2 e; B( l4 e8 J9 G* |
  20.            "\"
    2 b4 p& D3 J+ r# t. E+ N0 h5 b( Z
  21.          )
    $ N- S: m9 E+ w' c0 ?
  22.   )2 }/ p# M' S0 u
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    : y; Z* Q5 s2 y; B2 `' T: U
  24.   ;;保存系统变量值
    ; R& c' b7 W# z  B
  25.   (setvar "acadlspasdoc" 0)
    + Y2 e8 E9 u- h7 M0 B5 Y
  26.   (setq dwgname (vl-directory-files path "*.DWG"))% c. I) V7 @" P' B: {2 v7 x
  27.   (setq num 0)
    7 `2 }# L/ T: Y2 ]# \# E
  28.   (if (/= dwgname NIL)
    8 U0 E/ q1 r, `) ]
  29.     (progn
    $ B8 O/ D' j& y6 c; @6 [8 L7 H$ i* U
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象
    / y+ s/ {3 @8 _) |- Y3 q
  31.       (repeat (length dwgname)* |6 B) c, J  }' t, ^* U
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))3 n  x9 t5 O0 Z  m: _7 C7 H
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))- w' }1 K% {" p4 j  `9 A
  34.                                         ;打开图形并获
    * D# C0 l' N9 b3 @  U0 g: C( Z5 W
  35.         得其对象
    6 I  q4 n( q. V
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。1 r( p+ q, p4 j' a, L
  37.         ;; …
    . V4 ?, j* z- r1 M; q
  38.         ;; …
    % o4 l, g& e6 l3 L0 H
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)( n6 U" y' p1 [+ c, K" S* ]- i
  40.         (setq num (1+ num))
    ; z  ^# r. o; V. m; c
  41.       )
    ) k/ l" I1 ^' n5 Z
  42.       (vlax-release-object doc)
    ! V# r4 N2 i' p4 w- ^1 U
  43.       (vlax-release-object APP)) o; ^3 f' \1 V0 y
  44.     )( T8 g6 ~1 |& K  M4 {- T
  45.     (prompt "\n所选目录中未有任何图形!!")
    4 W' G& R; s% `4 y1 z( U/ m3 l
  46.   )' }+ |" c/ C4 `9 m
  47.   (setvar "acadlspasdoc" OLDLSP)
    0 N! j2 }; ]  i# _7 [& {$ C
  48.   ;;恢复系统变量值
      y2 N, U0 g4 d* w" z% q
  49.   (setvar "cmdecho" OLDECHO)
    . Z* y- l% }1 N/ V- o) B
  50.   ;;恢复系统变量值$ m$ M& ~  e/ x9 U' _/ o% z( Q8 y
  51.   (princ)" u% x6 p% L, A+ \0 z4 R' T
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 16

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

本版积分规则


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

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

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