QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

7 a, e  a4 z- ~8 k3 m
* M' B- N3 @/ `0 ?) T' R; S  L3 e
(arxload "acetutil.arx" NIL) ;;需要相应版本的ET(Express Tools)工具支持
0 \8 X2 o; ~( |7 E9 `+ X(vl-load-com): E. U1 _0 ?8 C' }) u
(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent) v$ G( z0 K1 S/ d
);;主程序定义
# C( s1 j3 X& T" k0 }(setq OLDECHO (getvar "cmdecho"));;保存系统变量值- }9 h2 V. L3 F* \: p* u
(setvar "cmdecho" 0)/ y+ t0 M8 W/ D; a4 b1 t* X* a& G9 Y
(setq path
8 o' r: Z4 ~0 W9 {8 a/ D (strcat2 p5 g8 S$ l9 D2 r. Z) W! I, \  E0 A
(vl-string-right-trim
, m% n- R& Y/ q) T; _ "\\"
0 ?+ _9 ?$ d. w# |5 [9 }8 O (strcase (acet-ui-pickdir8 @5 D# \; e  R+ U9 J9 o
"选择目录") y/ {( g9 C! F3 R
(vl-string-right-trim "\\" (getvar "dwgprefix"))
- U2 H% S. l! n0 \ "批量修改". H( J7 C  Q6 g- R6 c
)
3 S  {; O- l: Z$ d )  _9 g8 `* n# k' C
)$ m: r7 W4 \4 h8 N& [
"\\"
8 j7 o2 R0 E$ Z) B1 l6 Z; ?" P; z )8 {% E/ b9 `0 l
)3 Q5 @# K/ T4 {5 Y, z+ y0 k
(setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值$ P- p% x, h) H* b% R& r
(setvar "acadlspasdoc" 0)
8 e, K9 J& [" N) k4 H# r: }5 n; M (setq dwgname (vl-directory-files path "*.DWG"))
: p4 f( o6 |  J4 f! { (setq num 0)
% L' t" q* i; k2 y' A$ d2 W (if (/= dwgname NIL)) T/ a: ]1 ?7 L/ j7 f' }+ u' B
(progn$ m# I8 l% g, O0 B* E+ w! a1 ?
(setq APP (vlax-get-acad-object));获得Acad 对象* k& C$ s; c% n& O4 n# H. ^
(repeat (length dwgname)
/ t; m; u0 Z. `6 R4 `. N' Q) X1 a (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
% W: D7 l7 Z6 l8 z* A (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获0 n: a5 `' L2 g; K; t+ C9 V
得其对象
% l7 ^' P: w7 [4 ?;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。& E+ g6 W) U7 j8 f0 s4 H! p+ e
;; …
& J, c4 ~7 p+ m( r2 g& A: y5 Z;; …
8 t# A; A7 i: @; g& X* f% o5 a(vla-close doc :vlax-false);关闭图形(不检查是否保存)# z0 D. S9 k0 I6 s9 v" B. C
(setq num (1+ num))
% Q; a; k$ D- s )
# g1 f# G& l& f( {- p$ u2 m0 O (vlax-release-object doc)6 ^) B8 U5 v# H/ ]9 w+ F
(vlax-release-object APP)+ O$ g3 }7 m( G- M9 r8 T3 I
)
1 x7 B1 N) A: N* d (prompt "\n所选目录中未有任何图形!!")
; ^4 Q  _: J( u0 `1 _, p )! W6 J. _+ G" [( a6 g
(setvar "acadlspasdoc" OLDLSP);;恢复系统变量值& _# l$ x7 `9 w+ j6 K
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
8 k8 K, Z* B3 l* ^(princ)+ r: r" ^0 |! m6 L9 B5 Z0 _, S
)
发表于 2013-9-28 06:54:58 | 显示全部楼层 来自: 中国吉林长春

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

代码本身只有一点小问题,应该是你上传时操作错误造成的,应与代码无关.重新帖一次,对照一下
  1. (arxload "acetutil.arx" NIL)6 Y- s; T+ O# L2 w0 T
  2. ;;需要相应版本的ET(Express Tools)工具支持$ {+ P. j% P) w! C
  3. (vl-load-com)1 [  M! e$ ]5 H. T& P9 _( \: }* o
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent)
    7 t8 @, o7 G4 [6 t0 o. |8 S
  5. ;;主程序定义' Y$ s) B7 ~/ P: p& [
  6. (setq OLDECHO (getvar "cmdecho"))
    1 h5 a  _" j  S" y2 `) E2 Y
  7. ;;保存系统变量值+ t# |  V' E, I  M5 s/ n: n2 q
  8. (setvar "cmdecho" 0)( r: e6 s1 g' n+ g0 O5 ^. N
  9. (setq path7 {) @  U/ Y" P0 {% G/ _$ I
  10. (strcat
    8 d1 ~9 U3 {, q
  11. (vl-string-right-trim0 e% E: k; S3 y% a0 d! r
  12. "\"
    3 A& ?1 L0 z7 v, O* ?# M
  13. (strcase (acet-ui-pickdir( ^+ q' b5 B" z, E4 G& F2 T9 B
  14. "选择目录"" C6 W9 K6 b! A; A# m8 S
  15. (vl-string-right-trim "\" (getvar "dwgprefix"))
    - e& z* H8 y, Y8 S4 R- X
  16. "批量修改"
    4 k) `* D5 c, T" B$ h: [
  17. )
    8 ^6 ~! P2 o, {2 j. X9 P* B
  18. )
    " V  _0 X6 D6 U
  19. )3 |8 G$ c) J% v8 p
  20. "\"
    2 c! a. U' T- G+ K/ R; F' X# P# S
  21. )! J4 P* Z4 Z6 T. F% t
  22. )
    1 c: L  U0 |( ~$ u: p
  23. (setq OLDLSP (getvar "ACADLSPASDOC"))% }# W+ J' J7 h3 {/ y5 |3 p: k$ a$ M: \
  24. ;;保存系统变量值
    # {% `6 e. S% V
  25. (setvar "acadlspasdoc" 0)
    % l+ ~. g" b0 _4 L. p! `
  26. (setq dwgname (vl-directory-files path "*.DWG"))3 \: {2 g: c8 e" a2 U: }
  27. (setq num 0), A: C$ D7 A; {8 o
  28. (if (/= dwgname NIL)
    ! ?- @: F* P( H2 f5 I& U
  29. (progn
    . n9 A( v0 E4 w0 I# P  V
  30. (setq APP (vlax-get-acad-object)) ;获得Acad 对象
    1 ~1 d/ c' T  z: w
  31. (repeat (length dwgname)
      K" u) s# p; C1 z  _1 Q3 p
  32. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))5 u4 C/ p0 ^# b5 A& D
  33. (setq doc (vla-open (vla-get-documents APP) DWGNAME2))4 U! m( ?, Z3 x! O6 n5 w
  34. ;打开图形并获得其对象7 ~$ X3 z: Q! j- `! \
  35. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。2 o9 d! G0 _8 R/ k; J5 e4 b
  36. ;; …
    * u% N2 Z( R. X
  37. ;; …
    5 O5 w4 ~5 R. a4 E! ^1 G
  38. (vla-close doc :vlax-false) ;关闭图形(不检查是否保存)
    & T! B- Y! g2 }2 X7 w6 d
  39. (setq num (1+ num))
    ) F- s4 o/ X. |) o* y* r7 c, _4 O
  40. )4 J. y1 W! x5 i& q4 t6 q. Q3 a
  41. (vlax-release-object doc)" b  y* m8 l$ N  I# @6 z# }
  42. (vlax-release-object APP)
    9 n% _3 P2 O* U7 C( }0 S1 d
  43. )
    7 ^2 K' n; l% z  I
  44. (prompt "\n所选目录中未有任何图形!!")
    ( e7 M0 @, J- M( `" m; m
  45. )- f0 V# {* J- p* [) o+ s$ f
  46. (setvar "acadlspasdoc" OLDLSP)4 \) y3 y5 x& n) c$ \
  47. ;;恢复系统变量值
复制代码
PS:下次发布包含代码的帖子,请使用格式符,否则代码中会有乱码,别人无法复制,也就没人理你了
) ^' a: s+ _& g3 p3 @7 G1 ]7 j2 B* m3 H9 k0 d4 P
你在使用中出现过这个对话框吗? Untitled-1.gif ; L' }8 s) t$ p  s' I
如果出现了,在其中选择相应目录即可.8 q8 k1 b9 c# t% R8 j8 W
如果没有出现,则说明你的CAD没有安装ET工具,本代码需要它的支持.
 楼主| 发表于 2013-9-28 11:30:55 | 显示全部楼层 来自: 中国湖北武汉
我的CAD已经安装ET工具且运行时也出现版主说的对话,也选择了目录,只是此程序只对所选择的目录下存在的dwg文件进行查找,而对于所选择目录下的子目录或子目录下的子目录内的dwg文件不进行查找,我觉得此程序存着这点不足,往往对下级目录及下下级目录遍寻查找dwg文件却又很有必要,若有十级的子目录再一级一级去选目录有些显麻烦了,再者此程序不能记忆刚选过的目录,操作略显麻烦,所以请版主及各位lisp大师们帮帮忙修改一下程序,使之可以遍寻选择目录及其子目录下的所有dwg文件,谢谢!6 [4 M4 I1 e+ Q1 E' J5 R2 w1 k9 j
附件中上传原程序。
  1. (arxload "acetutil.arx" NIL)
    , R. c( S7 ?6 G
  2. ;;需要相应版本的ET(Express Tools)工具支持, q. O8 R# r8 n, K* W- M2 E/ M$ t
  3. (vl-load-com)
    , Q& {* E$ i& Q  `9 E. F' h
  4. (defun c:GText (/ OLDECHO APP DWGNAME2 path num        dwgname        OLDLSP doc ent)
    8 C6 h$ L( W- x9 F
  5.   ;;主程序定义
    / \4 w: s. y: t2 Y( Z" D
  6.   (setq OLDECHO (getvar "cmdecho"))
    - x# G) I! v6 P
  7.   ;;保存系统变量值5 {, S' K2 K7 O! H/ S, o2 {. x
  8.   (setvar "cmdecho" 0): K+ o' {9 w! _  F# k
  9.   (setq        path
    2 i) L. b  V) F( m6 I
  10.          (strcat
    * x6 f$ p  N& o  z- T3 g
  11.            (vl-string-right-trim1 v; p) X) ~6 I: \9 U
  12.              "\"
    4 q' x8 \' B& S8 E
  13.              (strcase (acet-ui-pickdir9 b  Q% D2 U7 N, m- L' @" \8 A  d
  14.                         "选择目录"
    4 ]2 ?% i/ G6 c+ k/ n4 z
  15.                         (vl-string-right-trim "\" (getvar "dwgprefix")): H6 E" x1 s/ a) j+ r5 a4 Z7 @
  16.                         "批量修改"
    4 n3 v$ n) @/ H5 Q
  17.                       )' ?7 m4 v. n# d& _  O2 K- ]( W5 @& V, N
  18.              )
    . \: c4 }" ^: [
  19.            )/ }* y$ g: |5 S5 u
  20.            "\"$ n7 ?; a9 a/ q( j6 O0 d' Q8 [
  21.          )
    9 T' U0 H' ]: p- L
  22.   )/ N4 f7 n$ B4 G
  23.   (setq OLDLSP (getvar "ACADLSPASDOC"))
    5 j# W7 |' y6 A4 z2 I* I* o
  24.   ;;保存系统变量值( }& B" Y: N1 J
  25.   (setvar "acadlspasdoc" 0)9 x" x2 y- p1 O
  26.   (setq dwgname (vl-directory-files path "*.DWG"))! f0 A* N1 U* {( U6 ~8 B' _8 o
  27.   (setq num 0)' H# o7 O1 D. T$ e
  28.   (if (/= dwgname NIL)
    ) J$ A+ U1 D4 u+ z  r9 I
  29.     (progn) {( I7 F, l" @, w% D
  30.       (setq APP (vlax-get-acad-object))        ;获得Acad 对象
    : I8 ^2 Q1 ?) x* E& |, {
  31.       (repeat (length dwgname)+ M9 m0 p  A% o7 _7 p
  32.         (setq DWGNAME2 (strcase (strcat path (nth num dwgname)))), z& `6 G) v  t$ B5 z5 Z+ z
  33.         (setq doc (vla-open (vla-get-documents APP) DWGNAME2))7 E9 a/ H/ J, C3 D. n
  34.                                         ;打开图形并获" k6 [3 M9 j* w
  35.         得其对象3 k4 g4 ~8 J: n- T. d9 f  H, X( [" f
  36.         ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。* @- F/ k! a7 _. {7 E4 L3 e
  37.         ;; …7 w7 c! W9 F' t# a" c" V
  38.         ;; …; J& u. w( R: K. {
  39.         (vla-close doc :vlax-false)        ;关闭图形(不检查是否保存)  `9 t  s$ z+ B6 Z/ d$ Y1 P! W
  40.         (setq num (1+ num))/ k0 c7 V) n+ c/ m/ [
  41.       ). @9 a3 D  _5 F0 i' m7 A
  42.       (vlax-release-object doc)
      n3 H6 H4 S! h/ O
  43.       (vlax-release-object APP)
      Q' U, v) D/ X) a# v
  44.     ): \0 s4 \( v, @: Z
  45.     (prompt "\n所选目录中未有任何图形!!")
    ( Q$ U  m# y6 _* S* {4 E
  46.   )2 X4 `4 `' }6 Q0 r
  47.   (setvar "acadlspasdoc" OLDLSP)
    8 ~  o/ A" ^& k2 l& z
  48.   ;;恢复系统变量值
    % h; w* Q4 |; }; z, S5 L! q+ U( {
  49.   (setvar "cmdecho" OLDECHO)+ j. f# L& U$ f& O# i# ?6 g
  50.   ;;恢复系统变量值
      Q$ ~6 d7 G. g9 a& T
  51.   (princ)
    2 [# u' t7 l9 a
  52. )
复制代码

GTEXT.rar

844 Bytes, 下载次数: 15

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

本版积分规则


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

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

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