QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!
0 U" q. g) H6 G( O* @/ \
& t: J$ a4 u' x' }& I; O: ]0 ~4 n( }+ _3 U8 F( N
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持" I# G3 ^" P$ ?6 D6 r
(vl-load-com)
2 A9 G) Z% t2 c. S$ J; s (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent5 C! {- F! T% B  w! Y9 m
);;主程序定义5 D' W1 A$ _/ k) E- m5 [* n; ^; j6 A
(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
6 }+ l, v. L$ e( D4 w(setvar "cmdecho" 0)
8 s% G2 B, J0 Y* e1 u (setq path
& f5 @% N3 x  z* T (strcat$ o! @- [0 A* {
(vl-string-right-trim
& \% A  G9 G* N7 C2 x2 w  [ "\\"
; o* U/ \% v! X- ^# m (strcase (acet-ui-pickdir
0 |9 j% F7 m( U  ?* A% C! ^. Z1 f! ` "选择目录"
# A4 d, g. D8 y6 d/ R9 W (vl-string-right-trim "\\" (getvar "dwgprefix"))$ E8 R5 @% j! j* ^1 n
"批量修改"
4 ]% ]( Z, _0 s  ` ). z: K! o/ ?6 T$ p2 y& o+ V
)
+ j/ M1 T6 Q" S2 ^0 [3 N )) e7 m2 ?8 c9 \3 p( S
"\\"
9 d% b6 _0 |9 ~, [* M( y )
6 |* M9 U1 J  Q1 m0 o& ~5 k )
; m; S( {' s3 L) \' [ (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值" |  `$ p6 m6 k' ^
(setvar "acadlspasdoc" 0)
6 ~# |4 h8 A% v* P4 X. e( E (setq dwgname (vl-directory-files path "*.DWG"))
" g: x6 L. ]0 `# w& G (setq num 0)+ G. A# v/ O" x$ \$ D9 C
(if (/= dwgname NIL)
) o7 ?6 g2 }, F4 q (progn% {0 t/ S* [$ p( M* N; [
(setq APP (vlax-get-acad-object));获得Acad 对象
7 F3 o& H/ T+ o1 K$ T9 a9 P9 X(repeat (length dwgname)
3 p+ b0 P9 d8 r (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
4 Z1 L: K7 k9 u" U- J( U  d (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获
1 ~2 b$ I5 }0 z! B+ ^ 得其对象) _. P& d/ }' m! X/ ]" ^
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
0 E! d3 [/ P8 V" d$ b2 \( |;; …# E4 t: ^) x9 ~
;; …
! I0 `+ @9 h3 w(vla-close doc :vlax-false);关闭图形(不检查是否保存)- z: }# J, {8 W5 M
(setq num (1+ num))
% ~. V8 e* H( B )
+ y( D$ S9 q8 s9 W! f9 T: e* O (vlax-release-object doc)
- d9 C9 ]1 y0 n+ ~ (vlax-release-object APP)
/ u2 u" |8 _5 N4 Q- L )
& E8 I# r5 T! i9 D" G (prompt "\n所选目录中未有任何图形!!")' O; q' e- _8 f9 O# {
)
+ _8 z/ l7 E) N$ B7 J' ?5 d (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值0 ]- u% x) G& A, T' e* a
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
. i( _0 b( h' M: L2 N( T9 J(princ)- \4 z' X  [6 _5 ^$ d
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)2 ?7 Z5 _) \1 f* l* h. V
  2. ;;需要相应版本的ET(Express Tools)工具支持$ ~0 ]- s9 S/ ]# Q
  3. (vl-load-com)
    4 Y/ L" u' q; [: h
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
      R2 O  k9 m+ `: o: }
  5. ;;主程序定义7 ^- E8 X% Y2 N; _( c) A
  6. (setq OLDECHO (getvar "cmdecho"))
    ! y) y, i9 \: k  K) b& ]
  7. ;;保存系统变量值
    . A5 g. `4 c' O/ }$ d; W* n( y
  8. (setvar "cmdecho" 0)
    ' ^0 [6 e; r, S8 T
  9. (setq path, }' V4 W: R3 T5 F7 Y* Z
  10. (strcat
    " V2 H$ w7 R" c* ^+ z( n
  11. (vl-string-right-trim$ M; S' f. x6 }3 d
  12. "\"& G" Q& u6 ^) R3 D- \& W3 U5 n
  13. (strcase (acet-ui-pickdir
    $ v. G/ ~4 m# L! S) X! c9 d* x
  14. "选择目录"1 f7 L% R! e7 c( H9 }' W
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    * N9 r, x/ H9 \; E
  16. "批量修改"
    / C0 j( v" L! K# \  ~. Z7 w; M% s
  17. )
    , n1 n& Y3 d/ L
  18. )4 A9 x' Y1 S, a8 h
  19. )0 |! R) H+ P* B9 x
  20. "\"& R6 ~) Q4 g$ S" |+ J
  21. )
    - x4 i, f2 l0 d, y
  22. )
    7 q+ @! |  \" n6 m, |8 x
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))+ ~9 D6 `3 P4 _  e
  24. ;;保存系统变量值
    5 l1 s2 l) @! i* v' b+ c
  25. (setvar "acadlspasdoc" 0)" k/ w( {+ H( d8 r4 z
  26. (setq dwgname (vl-directory-files path "*.DWG"))* t, U6 h* z+ ~2 p
  27. (setq num 0)3 p4 t  h- k$ e8 B! T
  28. (if (/= dwgname NIL)" w" _; h, {. Z+ o. o; m: y/ M
  29. (progn
    : b7 z) P6 W) o( P4 T4 g
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象! s2 h% C# T: K8 q* O* y$ c6 [' ]
  31. (repeat (length dwgname)
    3 m5 i# I) H+ J" X* `, V
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))! \' u$ [5 h% `/ }, b
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))- U& C" h) r6 {9 d7 C0 _# d! Q
  34. ;打开图形并获得其对象
    9 b4 M5 h) Q+ J! O5 ^
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
      v; r  a( `$ A; g7 d
  36. ;; …
    5 ]& E6 I3 d6 _  T, Z
  37. ;; …( Y' I; P5 [% L' e4 Z8 D* j- H8 A' r
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)/ s2 O' D% d8 k6 T5 I
  39. (setq num (1+ num))# b6 M: q! `) P% c( p& V
  40. )
    $ r2 |: E3 M; t0 x% z/ t
  41. (vlax-release-object doc)5 |8 u: x$ w0 }4 v, M
  42. (vlax-release-object APP)( i' J. \' X' B$ T; g3 C
  43. )
    6 @, I- V3 v. K0 U' {- j
  44. (prompt "\n所选目录中未有任何图形!!")
    + Q8 a$ p  u( v- B
  45. )
    6 C& f' T+ q9 R" @- p
  46. (setvar "acadlspasdoc" OLDLSP)  Y& g1 h/ S+ p8 S( y8 _( O( x
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了
6 K4 M7 f" T4 |& O& _- o, P$ c) J9 l: I) v' ]: j
你在使用中出现过这个对话框吗? Untitled-1.gif ) _2 H5 b+ E8 I, N# o' R
如果出现了,在其中选择相应目录即可.
& h7 \: o# l& m/ r/ N2 l如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!
# }1 v) y0 S! {/ b附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)  |9 o# ^7 A* S9 t
  2. ;;需要相应版本的ET(Express Tools)工具支持
      P! A' ~% E- H- }8 m, B
  3. (vl-load-com)
    # Z( Y1 x, t. f6 P0 q  q
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)* r' M8 I1 q* D( }. Z
  5.   ;;主程序定义# m. X% E5 ?* }4 [
  6.   (setq OLDECHO (getvar "cmdecho"))
    % O  x  ]* r% I5 |
  7.   ;;保存系统变量值
    6 v3 ~4 U' B3 E5 H7 a1 t
  8.   (setvar "cmdecho" 0)
    : ~9 U2 W' Y) d2 J& s) Z! `
  9.   (setq        path
    4 l+ _5 r% K* A, W
  10.          (strcat" ]! O7 Z" J6 f. M* q0 T
  11.            (vl-string-right-trim
    * T6 L1 x5 ]% x8 ]3 ~0 g
  12.              "\"
    * t  F" d* }7 q8 P5 a' Z
  13.              (strcase (acet-ui-pickdir
    2 ^+ i" R9 V* n: s2 G- S! h! L
  14.                         "选择目录"
    5 N0 W: T- B' O& d% q  x
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))+ Z9 F) N0 Q+ L6 k/ N
  16.                         "批量修改"/ O1 O+ [, j' g
  17.                       )
    $ @5 Y" h  V. ^5 I& k3 k! U
  18.              )
    + w& T- b# x( k5 }" \7 d- t
  19.            )
    7 ]/ C  X' j: h" N- ^: k
  20.            "\"$ y, z! E: r( H- [" \- ]
  21.          )
    ! Y' q6 e  `; i0 D
  22.   )
    , U: z% q; d4 ?6 d4 m: N+ ]& p
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    & ~* v3 s& @  Q7 Z0 P, N7 D
  24.   ;;保存系统变量值, q( u1 K2 ~3 l# l% P! ~$ e; ^
  25.   (setvar "acadlspasdoc" 0)" @. H% n5 U$ E( H5 j
  26.   (setq dwgname (vl-directory-files path "*.DWG"))0 k2 @6 ~& _! u0 m* s
  27.   (setq num 0)
    $ h4 t- r; @5 J) ^7 R
  28.   (if (/= dwgname NIL)
    . \2 M% D5 k7 X6 R/ ~* e5 h
  29.     (progn
    : P1 _3 S4 Y  ~# s5 {0 x- r
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象! e/ O* Y: r4 H+ v9 E
  31.       (repeat (length dwgname)
    ! h1 Z' o* Y2 \* ^/ c$ M9 T% v; V
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))- l' R* ?6 X' K0 j  e) z9 B
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2)); b9 ^) y! H. Y
  34.                                         ;打开图形并获3 w( q( _7 u" B. g9 c
  35.         得其对象' e- c( z6 j. ^1 w# V% i
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    ! a; e# r! o* U2 z$ B& C
  37.         ;; …
    ( o& A- q7 n! M& i: x- J
  38.         ;; …( u7 }) B1 N! V! O( B: f2 u, f
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)8 E! L% [* H3 l! \* \! u% u' g$ R( m
  40.         (setq num (1+ num))
    & s% e; s% o! T; N$ Q- ?
  41.       )
    % n% x; f+ }9 f: ~6 i
  42.       (vlax-release-object doc)/ b# s0 }2 {# y( `+ x1 a) L2 s3 n
  43.       (vlax-release-object APP)
    7 ^1 w1 \; w: `8 B1 M% b3 O
  44.     )
    $ O9 R7 z( O+ J3 ^2 K1 S' F
  45.     (prompt "\n所选目录中未有任何图形!!")7 \9 K6 \/ D4 g$ v5 g1 Z
  46.   )7 I0 I/ J1 U% p$ J. F
  47.   (setvar "acadlspasdoc" OLDLSP)2 a( p8 T4 b$ _. I7 w, S# r- m
  48.   ;;恢复系统变量值( m: P" q2 x+ v! L5 Y; b- o* v
  49.   (setvar "cmdecho" OLDECHO)
    $ r% M: Z( H$ D6 J1 o& Y# v
  50.   ;;恢复系统变量值7 e4 U7 e6 Y1 Q# r# a. L1 }+ T
  51.   (princ)+ N9 h# w' ~7 m9 t! f/ U9 G- n$ f
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则

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

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

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