QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 3065|回复: 2
收起左侧

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!
- C( U$ U- ?% p6 @* J! B$ W: ]2 k3 u/ H7 V' f7 F

1 V, M7 b$ ]. s5 r
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
% e. |$ c) u7 ](vl-load-com)
& t' M) D9 p' n9 l3 c (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent
2 l6 m# Z% \5 @% n+ j );;主程序定义; F" Y) t; p+ Z3 \# F( R
(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
% l9 e$ Q3 Z9 d3 e. b(setvar "cmdecho" 0)
7 K' `6 R2 h9 \3 M0 Y& D* \( h7 Z: M (setq path
& J$ Q6 P4 t9 C2 p# i (strcat
1 h# i2 \8 z- T  s4 m (vl-string-right-trim4 r5 K; B' N: S  l$ \; J% p3 \# H5 |
"\\"
, O& E+ F' ?2 j) S6 ] (strcase (acet-ui-pickdir/ B  O2 o9 N1 f  T
"选择目录"# G9 I$ `3 k4 m+ {1 j# K, B
(vl-string-right-trim "\\" (getvar "dwgprefix"))
. m" H9 {% J% e) P& q* e "批量修改"' d* O9 |- y4 b& ]  v* P' z+ c
)
  k0 e/ ~( B3 d0 `/ G9 v )
- Q- d  Z* A: C$ n1 f" n )
$ q& E! a6 d& B* G3 b+ r8 V, @/ j "\\"5 N7 x* U8 I/ O6 a/ v
)% ?5 E0 y1 ~' l; m; F
)
% M. @. S" B; R3 Y% l7 n0 @ (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
$ \  A' c' F- _; s: K4 j5 _1 Z% I: a(setvar "acadlspasdoc" 0)3 I& {, P( l8 w+ ]: _4 K9 }
(setq dwgname (vl-directory-files path "*.DWG"))+ K; k9 a; z0 b( o) w2 P8 U
(setq num 0)
5 }: q" z; s( P9 }% m/ z (if (/= dwgname NIL); `2 W! N8 M9 X7 u
(progn
: G. J8 M* f! |. Y. U (setq APP (vlax-get-acad-object));获得Acad 对象
! G. I9 |) l) Q- Y) E5 g, I(repeat (length dwgname)
) A0 h2 P) N1 [# c- p" w0 U (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))6 s+ Z) W( X. R
(setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获5 a* M9 X% U; Y1 M: N/ R
得其对象
/ h; u( K. `! a( r4 v;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
* q+ v1 P5 X6 X3 f3 b" G;; …
/ N/ e. P! L" T1 x; b. {1 T;; …
9 D& `& |  p4 w8 O8 B+ C/ b(vla-close doc :vlax-false);关闭图形(不检查是否保存)6 k0 i0 [4 |! c! k9 V
(setq num (1+ num))3 P7 ]2 M7 D0 C2 p0 |2 j, n
)
8 h/ U1 N4 ~/ P (vlax-release-object doc)
7 U) ]. u2 I* J$ @' i$ C (vlax-release-object APP)
9 e3 ^7 F4 k$ s. _2 q1 Y9 y )4 }- Y2 g" r# s) Z
(prompt "\n所选目录中未有任何图形!!")
( b, ~, T0 m7 n' L' l2 x  |: R )" U# I( M: f4 k
(setvar "acadlspasdoc" OLDLSP);;恢复系统变量值" i+ I/ m3 o5 t# i8 J, q
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
3 z2 U! W) K% x1 W9 y(princ)
0 R; O+ `; M+ g+ K5 I' }& ?- I# ^ )
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    , @' o, ?! i) O+ y; R/ b5 q
  2. ;;需要相应版本的ET(Express Tools)工具支持- `% h: v3 |$ P9 V
  3. (vl-load-com)- ]6 K4 x& U$ J% q# S" D/ h
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)$ @  P5 @. u6 P7 z
  5. ;;主程序定义; r8 K5 s4 l4 ~* f& g. b. `3 N7 [
  6. (setq OLDECHO (getvar "cmdecho"))
    1 G# {6 K4 ]  o) a9 v; x' k
  7. ;;保存系统变量值! ^9 t& D9 D4 V  s, ^
  8. (setvar "cmdecho" 0). U' M2 K" n; @  }
  9. (setq path# v3 d, T4 \( l
  10. (strcat
    6 e' o7 ^/ @0 A- Z, _# f7 J
  11. (vl-string-right-trim
    ) S( r9 Z- R0 y3 ~$ @! R  T
  12. "\"
    , k# X& `. z2 ~2 i
  13. (strcase (acet-ui-pickdir
    3 O, G& T/ G6 w: L2 _* T
  14. "选择目录"! @, g7 d  b7 E/ O7 Y5 p8 o
  15. (vl-string-right-trim "\" (getvar "dwgprefix")), f2 l; X" T# K' g& l
  16. "批量修改"1 ~+ ]& k* E: G. R
  17. ); e# @3 w' a( A5 Y
  18. )& @5 z! z, X8 Q& u+ `# M5 `
  19. )5 H8 o( L/ ]# h, Q3 f% y
  20. "\"
      a* P3 V5 N# j( g
  21. )
    0 X7 f  R% b9 C4 A' X! B
  22. )( b0 M4 L9 ^# o# t1 A0 n/ s; }! P
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))( z& O( B- _# V3 z" G2 N& K
  24. ;;保存系统变量值
    3 y  `" s; s/ G- {9 t& b' q6 B  h. e) @
  25. (setvar "acadlspasdoc" 0)
    8 r4 l  z" @# I0 P( L
  26. (setq dwgname (vl-directory-files path "*.DWG")): T7 c5 J" M4 i4 H. ]% \0 R
  27. (setq num 0)
    0 S& c  d5 E9 G, r
  28. (if (/= dwgname NIL)
    9 J1 U7 R( C) o) Z/ w5 u
  29. (progn
    2 D0 |7 e! Z! h; v
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象
    7 u8 J/ m* V* {7 A. }4 J. ]
  31. (repeat (length dwgname)# f. W! ^( m$ {
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))+ U* D. |) d& K& Z* _6 F; l
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))/ \, f4 r$ Z0 N8 i9 u, d1 o, z
  34. ;打开图形并获得其对象; ^; b$ P" X4 }3 V2 Q4 f7 J
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    ( ?; p" e7 t6 Q! ~& R
  36. ;; …
    & r1 t9 m. J: f9 h) \! L
  37. ;; …5 L; j: [9 e- y# P
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)
    / `# n! E  m! H* o6 U) \! T
  39. (setq num (1+ num))
    4 e/ S6 E( e, c3 S. @+ S% B: Y: y
  40. )
    6 f2 x( ~2 T7 X
  41. (vlax-release-object doc)
    / C+ u) e, y& [6 |8 w; @5 D$ B( P, d$ T
  42. (vlax-release-object APP)
    # e, |& V, i7 p8 K# B3 g2 l
  43. )) ~( r7 u" k0 y; h
  44. (prompt "\n所选目录中未有任何图形!!")4 H, L9 q7 \4 o+ I* @  h6 t4 W! H
  45. )
    " _/ a: e$ |7 X& v
  46. (setvar "acadlspasdoc" OLDLSP)
    ! ?9 v0 D$ W; L+ Q/ K- S
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了
2 ^& B( d3 x9 L* z, v0 i3 C; g- K5 q/ W4 ^
你在使用中出现过这个对话框吗? Untitled-1.gif
" t3 d: ]" `$ ?- [如果出现了,在其中选择相应目录即可.- r# n" Y& {9 ~
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
* G( E1 I4 @+ B! z附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)( H% @# [7 f) ?, Y  Q- ^
  2. ;;需要相应版本的ET(Express Tools)工具支持
    % O% M" z: D6 q
  3. (vl-load-com)/ l) L4 B, M+ C  a: e6 d  z
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)
    ; E- m( i0 Q: I- D# N
  5.   ;;主程序定义
    * Q+ o1 L9 d4 _
  6.   (setq OLDECHO (getvar "cmdecho"))
    $ R8 s3 M- b+ ?0 ?& E" t& D
  7.   ;;保存系统变量值$ V8 w) ~1 I6 Y/ ?3 h
  8.   (setvar "cmdecho" 0)
    3 M: @& [  r0 @
  9.   (setq        path4 d1 W6 ]# V: Y' O  |! a7 g  X
  10.          (strcat6 v" e! `9 g4 u8 F9 S, w
  11.            (vl-string-right-trim. e0 Z7 Q7 A- n5 e
  12.              "\"7 u; o/ U1 |9 i1 d
  13.              (strcase (acet-ui-pickdir9 G9 \! N* J' N, U- `3 E1 R
  14.                         "选择目录"- N1 g5 [5 d4 p
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    ) {3 B; v$ C/ y
  16.                         "批量修改"
    . n3 C! s2 O+ z$ |$ `
  17.                       )
    * H0 J, u$ G! ?
  18.              )
    9 @/ r8 B; Y0 K# N
  19.            ), d$ Z/ W$ j9 `& V
  20.            "\"  C, ]* S# z$ {% n7 y5 Q0 _
  21.          )
    & B: O# p, y6 O8 ?9 e3 _
  22.   )
    ) }6 u  [2 Y, E+ G
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))- c! s+ C* S" X/ r6 A" m6 u- H# x
  24.   ;;保存系统变量值3 f1 [4 f4 s( s% s9 N
  25.   (setvar "acadlspasdoc" 0)" N# k: J4 E2 m9 G  S$ j6 ~
  26.   (setq dwgname (vl-directory-files path "*.DWG"))
    ' F# r8 A1 Y) g9 i/ ?* S9 _5 `
  27.   (setq num 0). i2 X! m) X- y6 M& R5 Z0 E
  28.   (if (/= dwgname NIL)
    . x0 e' P, D1 g. Q  i
  29.     (progn) ]: A+ @4 R. P- A2 [' S1 L7 c
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象1 r6 W5 U) d1 k+ n9 ?
  31.       (repeat (length dwgname)
    2 L" c  B" O/ d" l7 y
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))# K/ V" ^4 J- X$ \- V, D- y
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))" t6 C+ R9 Q- Q
  34.                                         ;打开图形并获
    - e+ S/ o8 v6 u
  35.         得其对象- \4 S1 a0 L# E: L- {3 g, W: H0 ~: L
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    & N( W' I. W8 K
  37.         ;; …
    1 W$ g9 r$ X7 ^% p; F: P2 C1 n
  38.         ;; …
    ; g( P1 A9 O. g
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)  \: @# @* |* i, x
  40.         (setq num (1+ num))
    & e4 o' O( f3 J$ G9 \" l. ]* B* i
  41.       )5 D. N' J) I" @) k, C, @' m
  42.       (vlax-release-object doc)) a4 q1 Z2 R& H, I0 a  t
  43.       (vlax-release-object APP)9 u( }6 w. V. t  d9 r
  44.     )4 V$ l+ V# y$ T1 v4 ?' n- E
  45.     (prompt "\n所选目录中未有任何图形!!")7 Z# v) K0 l8 \( J" s
  46.   )
    : Q/ m  D7 {+ l0 g. I' x/ G! B
  47.   (setvar "acadlspasdoc" OLDLSP)
    / R* l4 f; Y2 B' V& |5 r
  48.   ;;恢复系统变量值) K; l( Y+ m+ m2 n* b
  49.   (setvar "cmdecho" OLDECHO)% Q  k0 J, H8 d% I( S  p& c( Z
  50.   ;;恢复系统变量值/ X0 g, @* _3 S6 }' g  j
  51.   (princ), T# J7 O, c( O2 [
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则

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

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

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