乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 113|回复: 19

[编程交流] 目录Lisp

[复制链接]

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:15:19 | 显示全部楼层 |阅读模式
有没有办法让它返回两个文件夹来保存绑定的文件夹或电子邮件?
 
示例:M:\1234\dwgs\electric,我希望它将文件夹保存在1234文件夹中,该文件夹将是两个文件夹。也可以将其视为dwgs文件夹之前的文件夹。提前感谢您所做的一切。
 
  1. (defun c:BindIt ( / )
  2. (setq vDia (getvar "filedia")
  3.       vEcho (getvar "cmdecho")
  4.       vPrefix (getvar "dwgprefix")
  5.       vName (getvar "dwgname")
  6.       vDate (rtos (getvar "cdate") 2 6)
  7.       vYear (substr vDate 1 4)
  8.       vMonth (substr vDate 5 2)
  9.       vDay (substr vDate 7 2)
  10.       vDateStr (strcat vYear "-" vMonth "-" vDay)
  11. )
  12. (setvar "filedia" 0)
  13. (setvar "cmdecho" 0)
  14. (initget 1 "Bind Email")
  15. (setq vAns (getkword "\nSave file to [Email / Bound] <Bound>: "))
  16. (cond
  17. ((= "Bind" vAns)
  18.   (setq vDir (strcat vPrefix "Bound"))
  19. )
  20. ((= "Email" vAns)
  21.   (setq vDir (strcat vPrefix "Email"))
  22. )
  23. )
  24. (if (= (vl-file-directory-p vDir) nil)
  25. (progn
  26.   (vl-mkdir vDir)
  27.   (vl-mkdir (strcat vDir "\" vDateStr))
  28. )
  29. (if (= (vl-file-directory-p (strcat vDir "\" vDateStr)) nil)
  30.   (vl-mkdir (strcat vDir "\" vDateStr))
  31. )
  32. )
  33. (command ".saveas" "" (strcat vDir "\" vDateStr "\" vName))
  34. (setvar "filedia" vDia)
  35. (setvar "cmdecho" vEcho)
  36. (princ)
  37. )

 
谢谢你的帮助!!!
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

铜币
-21
发表于 2022-7-6 17:18:49 | 显示全部楼层
这会将路径修剪两个文件夹
  1. ;;;------------------------------------------------------------------------------
  2. ;;;
  3. ;;;Finds the folder name by how many folders up supplied in argument
  4. ;;;No error checking for too many folders argument
  5. ;;;Example:    (pp_GetFolderNameUp 2)
  6. ;;;------------------------------------------------------------------------------
  7. (defun pp_GetFolderNameUp(sNo /)
  8. (vl-load-com)
  9. (setq sPath (pp_StrRev (getvar "dwgprefix")))
  10. ;Get to folder above
  11. (repeat sNo
  12.    (setq sPath (substr sPath (+ (vl-string-search "\" sPath)  3)))
  13.    ) ;repeat
  14. ;Trim leftover folder name
  15. (setq sPath (pp_StrRev (substr sPath (+ (vl-string-search "\" sPath)  1))))
  16. spath
  17. ) ;defun
  18. ;------------------------------------------------------------------------------
  19. ;pp_StrRev: String reverse
  20. ;------------------------------------------------------------------------------
  21. (defun pp_StrRev (STR)
  22. (vl-list->string(reverse(vl-string->list STR)))
  23. )
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:24:23 | 显示全部楼层
另一种方式:
  1. ;;  CAB 10/07/08
  2. ;; (splitdirs "c:\\123\\456\\789") returns ("c:" "123" "456" "789")
  3. (defun splitdirs (str / lst pos)
  4. (while (or (setq pos (vl-string-search "\" str))
  5.             (setq pos (vl-string-search "/" str)))
  6.    (setq lst (cons (substr str 1 pos) lst)
  7.          str (substr str (+ pos 2))))
  8. (if (> (strlen str) 0) (setq lst (cons str lst)))
  9. (reverse lst)
  10. )
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:26:09 | 显示全部楼层
有没有办法返回到DWG之前的文件夹,不管它后面有多少个文件夹。在我已经给出的Lisp程序中,我应该把你猜到的放在哪里?
 
再次感谢
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:30:33 | 显示全部楼层
 
任何帮助!!
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:31:22 | 显示全部楼层
  1. (defun c:test(/ dir lst NewDir idx)
  2. (setq dir "M:\\1234\\Target Dir\\dwgs\\electrical")
  3. (setq lst (splitdirs dir))
  4. (setq NewDir (car lst))
  5. (setq idx 0)
  6. (while (/= "DWGS" (strcase (nth (setq idx (1+ idx)) lst)))
  7.    (setq NewDir (strcat NewDir "\" (nth idx lst)))
  8. )
  9. (print NewDir)
  10. (princ)
  11. )
  12. ;;  CAB 10/07/08
  13. ;; (splitdirs "c:\\123\\456\\789") returns ("c:" "123" "456" "789")
  14. (defun splitdirs (str / lst pos)
  15. (while (or (setq pos (vl-string-search "\" str))
  16.             (setq pos (vl-string-search "/" str)))
  17.    (setq lst (cons (substr str 1 pos) lst)
  18.          str (substr str (+ pos 2))))
  19. (if (> (strlen str) 0) (setq lst (cons str lst)))
  20. (reverse lst)
  21. )
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:35:58 | 显示全部楼层
 
当我做你的是什么都不做?怎么会?
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:38:43 | 显示全部楼层
测试lisp从以下内容开始:
“M:\\1234\\Target Dir\\dwgs\\electrical”
并返回以下内容:
  1. Command: test
  2. "M:\\1234\\Target Dir"

 
 
这是一个工具,一个子例程。
您需要帮助将其集成到lisp中吗?
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:42:31 | 显示全部楼层
 
是的,我迷路了!!!!
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:45:26 | 显示全部楼层
在这里,您可以调试它:眨眼::眨眼:
  1. (defun c:BindIt (/)
  2. ;;  CAB 10/07/08
  3. ;; (splitdirs "c:\\123\\456\\789") returns ("c:" "123" "456" "789")
  4. (defun splitdirs (str / lst pos)
  5. (while (or (setq pos (vl-string-search "\" str))
  6.             (setq pos (vl-string-search "/" str)))
  7.    (setq lst (cons (substr str 1 pos) lst)
  8.          str (substr str (+ pos 2))))
  9. (if (> (strlen str) 0) (setq lst (cons str lst)))
  10. (reverse lst)
  11. )
  12. (setq vDia     (getvar "filedia")
  13.        vEcho    (getvar "cmdecho")
  14.        vPrefix  (getvar "dwgprefix")
  15.        vName    (getvar "dwgname")
  16.        vDate    (rtos (getvar "cdate") 2 6)
  17.        vYear    (substr vDate 1 4)
  18.        vMonth   (substr vDate 5 2)
  19.        vDay     (substr vDate 7 2)
  20.        vDateStr (strcat vYear "-" vMonth "-" vDay)
  21. )
  22. ;;  remove the last 2 dirs
  23. (setq lst (reverse (cddr (reverse (splitdirs vPrefix)))))
  24. (setq vPrefix "")
  25. (mapcar '(lambda(x) (setq vPrefix (strcat vPrefix x "\"))) lst)
  26. (setvar "filedia" 0)
  27. (setvar "cmdecho" 0)
  28. (initget "Bound Email")
  29. (setq vDir (getkword "\nSave file to [Email/Bound] <Bound>: "))
  30. (cond
  31.    ((or (null vDir)(= "Bound" vAns))
  32.     (setq vDir (strcat vPrefix "Bound"))
  33.    )
  34.    (t
  35.     (setq vDir (strcat vPrefix "Email"))
  36.    )
  37. )
  38. (cond
  39.    ((and (null (vl-file-directory-p vDir))
  40.          (null (vl-mkdir vDir))
  41.      )
  42.     (prompt "\nError - Could not create Folder.")
  43.     )
  44.    (t ; folder exist
  45.      (command ".saveas" "" (strcat vDir "\" vDateStr "-" vName))
  46.    )
  47. )
  48.    
  49. (setvar "filedia" vDia)
  50. (setvar "cmdecho" vEcho)
  51. (princ)
  52. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 16:08 , Processed in 0.339093 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表