QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 3141|回复: 2
收起左侧

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

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

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

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

x
下面是在网上找的一段图纸批量处理程序,经使用发现只能在所选择的根目录查找dwg文件,对于子目录的dwg文件却不能查找到,因本人不懂LISP也就无法修改,请大师们帮帮忙,给改改这个段程序,使之不论是选择的根目录还是此根目录下的子目录也能查找到所有dwg文件,在此先谢过!!
& G6 j6 ]. a5 U0 x# w# e4 E' c! s* m& a

! \9 g0 Q" `# h
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持  H3 M8 I( k+ X
(vl-load-com): H! U* D. e& |: k, F# h9 y
(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent# w- o% l  {: v4 t0 n+ b0 K
);;主程序定义
" q7 J5 ~, ~4 S# C6 Y# p! }(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
# g& K% ~; n0 V* y9 V- {2 z8 A/ j(setvar "cmdecho" 0)
5 y9 z& N& o( D (setq path4 g- g# u* l/ X3 u4 L
(strcat. s! o7 x6 t1 Y2 F( T; Q  o4 w9 _
(vl-string-right-trim9 d* Z+ U$ q' g, m
"\\"
3 W9 n5 N/ l+ ^ (strcase (acet-ui-pickdir! f6 r" @3 R/ e% d
"选择目录"
( {- F& m: ?; J (vl-string-right-trim "\\" (getvar "dwgprefix"))
% P" p) c4 M1 r7 c2 Y/ _+ c) z9 c* L "批量修改"
4 Z* T, I% p3 J7 k$ X5 v1 E )- O, O* M8 l( B% o7 L
)
& c* l# {4 `1 o  @) b6 T )
+ a# u3 [; B) X/ o/ z "\\"
8 p# T! ?8 o3 I" n! _ )
; P" q3 y9 v3 ^2 H )
# P. m6 _! s3 P* z3 q8 z* a (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值+ M. f. S% K1 J( m0 U/ l
(setvar "acadlspasdoc" 0)( ?: s7 V: }& T3 @
(setq dwgname (vl-directory-files path "*.DWG"))
. M. s% I" C+ t; n (setq num 0)4 I6 f' F: P7 h$ Q$ U) M
(if (/= dwgname NIL)
6 D2 b3 ]+ Q, u$ k! B+ ?( ` (progn
8 A3 M4 b/ O3 k  t0 g1 } (setq APP (vlax-get-acad-object));获得Acad 对象( w- {6 f9 ~; ~" l9 W
(repeat (length dwgname)
5 \% a" U+ H8 c% o (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))1 x" p, ^7 t" b
(setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获6 Z8 h6 j/ V. t: k
得其对象
6 q7 p1 L0 l. c1 v3 e. G;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
2 [. i5 ~& g) I/ C8 h1 L;; …$ x  y" m1 B! b) G1 I
;; …
! V! k  i* @% L0 z(vla-close doc :vlax-false);关闭图形(不检查是否保存)
/ H: _4 L1 J7 t# G (setq num (1+ num))
# g1 l4 F* W4 j% K9 e )
: ~& R# E1 }, e (vlax-release-object doc)
/ n& a6 w3 Y" L- ^$ E3 I. N (vlax-release-object APP)
4 w- p/ v% r( t4 F4 j! H )! S& Q) g" K1 B% f
(prompt "\n所选目录中未有任何图形!!")
  y" `' z5 q' K: m) U4 [ )6 j6 Y- U* i2 ^: R3 R8 e: Z
(setvar "acadlspasdoc" OLDLSP);;恢复系统变量值( X; i& G, u& f8 J9 A
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
6 s# V' a: C0 \% S(princ)
7 Z3 X$ \- N4 }1 A, @5 D )
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)
    & r4 y) m" ]  z$ n9 b/ _7 q& j
  2. ;;需要相应版本的ET(Express Tools)工具支持0 p! ?# Z1 |; g9 Q
  3. (vl-load-com)
    ) o" y: |9 }1 c
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)( J3 @; l9 ]8 ?- N
  5. ;;主程序定义
    ; _9 T1 L$ _; {
  6. (setq OLDECHO (getvar "cmdecho"))
    2 l5 L( v# g' w+ K9 ~7 ?
  7. ;;保存系统变量值
    . a& h+ l4 ~6 k. N5 q
  8. (setvar "cmdecho" 0)/ s8 R2 C. P' k6 _
  9. (setq path
    , t+ F$ x( y) a6 F) `0 \4 z
  10. (strcat( n/ Q1 `1 Q0 z% S; B) d
  11. (vl-string-right-trim
    / X- v$ t  {, E" ~& e
  12. "\"
    ( G; \/ e- Z7 G
  13. (strcase (acet-ui-pickdir
    2 _9 J- s% m/ }. E8 d
  14. "选择目录"
    5 [0 a8 g- B0 v  T
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    , y# h1 x$ J; H# i2 s2 H- `) b
  16. "批量修改") u. R$ N: T; H, j# [
  17. )
    & @$ w8 X) U* \$ P. q# `/ u5 I% y
  18. )
    " \+ Q4 F  y: L+ Q7 ]8 e+ c) ?) h
  19. )2 u* Y, o9 o* N3 `8 _& n; L1 Z
  20. "\"
    ) r/ x4 `' o* ^, d  ?- x
  21. )
    # y5 Z% I) K* C; R% e) w0 N
  22. )
    + ~# w1 k3 S2 l3 N# n$ _$ P. J
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))
    . a, Y  B$ M# |2 h- {. Y
  24. ;;保存系统变量值( }0 j/ s8 C: {8 |2 m
  25. (setvar "acadlspasdoc" 0)
    * O/ Z- i; O+ Z- Q$ [
  26. (setq dwgname (vl-directory-files path "*.DWG"))
    " D- q, {& F' e6 A2 R4 U
  27. (setq num 0)
    4 e5 P/ J* n: f: c" R. Q
  28. (if (/= dwgname NIL): X& N% w/ S" o8 s& R
  29. (progn' X  Z$ J" y* P( t3 t
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象/ n+ I) c1 G5 d! J& Z2 n
  31. (repeat (length dwgname)
    % F2 H( D5 {/ q% ^
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))3 q  j# g; {, K
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))' G7 w# A0 O* T, f
  34. ;打开图形并获得其对象- _  X7 ~/ k, }0 @$ A
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    $ z4 ~' L; w  D6 R5 b4 M
  36. ;; …( W, u+ s7 L+ F, q
  37. ;; …9 U3 E; @# J* O4 ~$ U/ N
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)2 ^# E' w3 s2 M
  39. (setq num (1+ num))3 \+ |  q) ?% b* L% B# ~
  40. )
    / f5 e+ O7 X0 V* f' {" L) ^) I
  41. (vlax-release-object doc)
    * ]2 k& @3 l5 S" ]6 w3 r
  42. (vlax-release-object APP)
    / a% r5 [7 w% |" T7 S$ n4 t
  43. )
    0 s0 T/ p  Z$ @# N1 h5 v
  44. (prompt "\n所选目录中未有任何图形!!")3 |- c! B" p: B9 t, Z% b& N8 ?
  45. )7 D. f1 \4 ?4 p$ n
  46. (setvar "acadlspasdoc" OLDLSP)4 g4 N" p; r( Z3 T% W
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了- m+ ^- \; J5 q+ `2 x
1 ?- {0 `, S8 t& I" \7 ]
你在使用中出现过这个对话框吗? Untitled-1.gif 1 T  c2 C2 ^5 }; z/ G
如果出现了,在其中选择相应目录即可.
8 w# n7 g9 E1 s" [如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!& ^1 B* y. |% t8 b
附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)
    % S: C' ~' z/ Q3 n8 z
  2. ;;需要相应版本的ET(Express Tools)工具支持5 T8 M' q' u2 h" U" m0 v
  3. (vl-load-com)8 C/ z5 S7 _: I: J0 |' a
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)
    ! s, U: V2 ~% \$ G7 G
  5.   ;;主程序定义
    + X* @- k4 U- d0 C* i0 b
  6.   (setq OLDECHO (getvar "cmdecho"))
    % V! Y, _* ^- @
  7.   ;;保存系统变量值
    6 g" [& O. V1 \' J) Q
  8.   (setvar "cmdecho" 0)- {9 j. T- P3 L$ j  \
  9.   (setq        path
    6 q4 X# g/ ]& Z. E4 y$ C
  10.          (strcat9 V+ p9 e4 y* b) b* M
  11.            (vl-string-right-trim0 `8 |5 H5 n* w7 V  p; d
  12.              "\"
    ! ]" s2 ?1 D$ k& k, @  E
  13.              (strcase (acet-ui-pickdir
    9 x+ b0 z6 i/ j4 [) g( G
  14.                         "选择目录"
    / }2 [! X9 n# ]. P
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix"))
    1 c. `) v# {, e0 V3 L
  16.                         "批量修改"- ^$ Z" k$ ?  I' n/ ]. j
  17.                       )2 T! @/ a1 F4 s( s$ ]+ k6 X3 |3 z  T
  18.              )7 W+ U* }& I7 @3 l" z7 H) p
  19.            )
    . {' h9 \% t: E( ]: y
  20.            "\"( x+ a3 \$ a( H, {. d
  21.          )8 b% W7 A# U/ L: ?2 Y$ g! ^
  22.   )
    * t, I; C) a3 h# g5 d
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    ! l; ?1 e2 \* e/ N* H3 N3 x
  24.   ;;保存系统变量值
    % w: X: P0 \) g( a9 x
  25.   (setvar "acadlspasdoc" 0)
    7 A; t+ O" L2 o$ s
  26.   (setq dwgname (vl-directory-files path "*.DWG"))/ a7 V$ F  a6 y, S
  27.   (setq num 0)" `- F/ s/ x' H2 Z1 |
  28.   (if (/= dwgname NIL), P+ i" m' w1 ]
  29.     (progn; u. X  j4 b& L% Z6 R% Y! @
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象6 M3 N' S! i: p/ R6 ^& i
  31.       (repeat (length dwgname)4 Z; o* o! r4 a( H8 D$ _' s
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
    3 _, W! J' J* W
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))! w* x+ l' e# a. E9 }% I
  34.                                         ;打开图形并获# r7 x4 P, ]" ?5 n
  35.         得其对象/ A3 a; m# K3 ?6 {% Y2 `
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
    # \7 Z3 o; r  u- Q
  37.         ;; …
    # y9 P6 d: h: s; Y
  38.         ;; …2 I0 d( q' U! k8 K
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)
    / F0 b, G! ~  @0 ^6 T. o  |
  40.         (setq num (1+ num))
    ; _* \' n1 V- f5 c
  41.       )
    % f  s% z! K8 n" o
  42.       (vlax-release-object doc)
    ' z! ]9 g# [* s/ h( I
  43.       (vlax-release-object APP)0 y+ B. y: x5 t% v3 X
  44.     )% e+ Q. h3 z1 H/ p: W! l3 E! j
  45.     (prompt "\n所选目录中未有任何图形!!")
    9 \' U# g& W$ Y6 F, l
  46.   )
    ; ~2 |& a3 J2 `% @( |6 W# z  Z
  47.   (setvar "acadlspasdoc" OLDLSP)/ ?" R' S+ B$ N4 |
  48.   ;;恢复系统变量值5 w7 [5 g4 N8 ^1 J
  49.   (setvar "cmdecho" OLDECHO)
      M6 `3 M- v2 v. ?5 A
  50.   ;;恢复系统变量值+ {8 ?; M. N- r8 Z, Z. Y% a# t5 W
  51.   (princ)7 k3 o( `' g  H$ u
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则


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

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

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