乐筑天下

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

[编程交流] 目录Lisp

[复制链接]

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:48:24 | 显示全部楼层
 
我让它工作了,但它没有把文件放在绑定/电子邮件文件夹中,然后是一个创建日期为2008-10-22的文件夹。如果将其放在绑定/电子邮件文件夹中,并且只将日期放在文件名的开头。为什么会这样。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:50:46 | 显示全部楼层
为了让它工作,你做了什么改变吗?
我更改了代码来实现这一点,认为您不希望为每个日期创建文件夹,而只是创建唯一的文件名。
 
我真傻。
如果你愿意,我可以修改一下。
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:53:39 | 显示全部楼层
不,你什么都做了。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 17:56:37 | 显示全部楼层
修订代码:
  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. ;;  The following is to create a seperate directory for each date
  39. (setq vDir (strcat vDir "\" vDateStr))
  40. (cond
  41.    ((and (null (vl-file-directory-p vDir))
  42.          (null (vl-mkdir vDir))
  43.      )
  44.     (prompt "\nError - Could not create Folder.")
  45.     )
  46.    (t ; folder exist
  47.      ;;(command ".saveas" "" (strcat vDir "\" vDateStr "-" vName))
  48.      (command ".saveas" "" (strcat vDir "\" vName))
  49.    )
  50. )
  51. (setvar "filedia" vDia)
  52. (setvar "cmdecho" vEcho)
  53. (princ)
  54. )
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 18:01:40 | 显示全部楼层
 
好的,这很好。如果我的C驱动器上有一个绘图,但如果我的m驱动器上有一些东西,它会一直说无法创建文件夹,为什么。我甚至试着把c:\\改成m:\\但仍然是一样的。为什么?
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:05:22 | 显示全部楼层
问题是绑定文件夹或电子邮件文件夹是否尚未创建。
这应该可以解决它。
  1. (defun c:BindIt (/ LST VANS VDATE VDATESTR VDAY VDIA VDIR VECHO VMONTH VNAME VPREFIX VYEAR X)
  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.           )
  8.      (setq lst (cons (substr str 1 pos) lst)
  9.            str (substr str (+ pos 2))
  10.      )
  11.    )
  12.    (if (> (strlen str) 0)
  13.      (setq lst (cons str lst))
  14.    )
  15.    (reverse lst)
  16. )
  17. (setq vDia     (getvar "filedia")
  18.        vEcho    (getvar "cmdecho")
  19.        vPrefix  (getvar "dwgprefix")
  20.        vName    (getvar "dwgname")
  21.        vDate    (rtos (getvar "cdate") 2 6)
  22.        vYear    (substr vDate 1 4)
  23.        vMonth   (substr vDate 5 2)
  24.        vDay     (substr vDate 7 2)
  25.        vDateStr (strcat vYear "-" vMonth "-" vDay)
  26. )
  27. ;;  remove the last 2 dirs
  28. (setq lst (reverse (cddr (reverse (splitdirs vPrefix)))))
  29. (setq vPrefix "")
  30. (mapcar '(lambda (x) (setq vPrefix (strcat vPrefix x "\"))) lst)
  31. (setvar "filedia" 0)
  32. (setvar "cmdecho" 0)
  33. (initget "Bound Email")
  34. (setq vDir (getkword "\nSave file to [Email/Bound] <Bound>: "))
  35. (cond
  36.    ((or (null vDir) (= "Bound" vAns))
  37.     (setq vDir (strcat vPrefix "Bound"))
  38.     (vl-mkdir vDir)
  39.    )
  40.    (t
  41.     (setq vDir (strcat vPrefix "Email"))
  42.     (vl-mkdir vDir)
  43.    )
  44. )
  45. (if (vl-file-directory-p vDir)
  46.    (progn
  47.      ;;  The following is to create a seperate directory for each date
  48.      (setq vDir (strcat vDir "\" vDateStr))
  49.      (cond
  50.        ((and (null (vl-file-directory-p vDir))
  51.              (null (vl-mkdir vDir))
  52.         )
  53.         (prompt (strcat "\nError - Could not create Folder: " vDir))
  54.        )
  55.        (t ; folder exist
  56.         ;;(command ".saveas" "" (strcat vDir "\" vDateStr "-" vName))
  57.         (command ".saveas" "" (strcat vDir "\" vName))
  58.        )
  59.      )
  60.    )
  61.    (prompt (strcat "\nError - Could not create Folder: " vDir))
  62. )
  63. (setvar "filedia" vDia)
  64. (setvar "cmdecho" vEcho)
  65. (princ)
  66. )
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 18:08:18 | 显示全部楼层
 
谢谢你,真是太棒了。我只是在最后添加了一个东西,它将绑定和清除,然后重新保存
 
最后我添加了这个。
 
  1. (command "_.xref" "bind" "*")
  2. (command "_.purge" "" "all" "n" "" "_.purge" "all" "" "n" "" "_.purge" "all" "" "n")
  3. (command ".save")
  4. )

 
谢谢你的帮助,我希望这能帮助别人。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:10:30 | 显示全部楼层
把你的代码放在这一部分,这样只有在没有错误的情况下才会执行。
  1.         (t ; folder exist
  2.         ;;(command ".saveas" "" (strcat vDir "\" vDateStr "-" vName))
  3.         (command ".saveas" "" (strcat vDir "\" vName))
  4.         ;;  Add your code here
  5.        )
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 18:12:57 | 显示全部楼层
 
有没有一种方法可以将清除和绑定放在开头,然后可以代替savas来执行aectoacad。在aectoacad到文件夹位置之前,将执行绑定和清除操作,而不会更改任何内容。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:16:53 | 显示全部楼层
哎呀,用这个:
  1.         (t ; folder exist
  2.         (command "_.xref" "bind" "*")
  3.         (command "_.purge" "" "all" "n" "" "_.purge" "all" "" "n" "" "_.purge" "all" "" "n")
  4.         ;;(command ".saveas" "" (strcat vDir "\" vDateStr "-" vName))
  5.         (command ".saveas" "" (strcat vDir "\" vName))
  6.        )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-26 12:01 , Processed in 0.593209 second(s), 92 queries .

© 2020-2025 乐筑天下

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