找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 222|回复: 0

[文件] XD::FILENAME:DIR-ON-PATH

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2025-5-14 14:35:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. ;; ------------------------------------------------------------------------
  2. ;;; 函数名称 / function name: XD::FILENAME:DIR-ON-PATH
  3. ;;;
  4. ;;; 【功能说明 / description】
  5. ;;;     该函数用于检查指定的目录 (`DIR`) 是否存在于指定的路径 (`PATH`) 中。
  6. ;;;     它首先对目录和路径进行一些预处理(如替换斜杠方向、添加分号等),然后检查目录是否在路径中。
  7. ;;;
  8. ;;; 【参数说明 / parameters】
  9. ;;;     DIR  - 需要检查的目录路径(字符串形式)。
  10. ;;;     PATH - 用于检查的环境路径(字符串形式),通常是以分号分隔的多个目录路径。
  11. ;;;
  12. ;;; 【局部变量 / locals】
  13. ;;;     DIR2  - 修正后的目录路径(考虑到反斜杠的情况)。
  14. ;;;     FLAG  - 用于标识目录是否存在于路径中的标志值,返回布尔值。
  15. ;;;
  16. ;;; 【返回值 / return value】
  17. ;;;     返回布尔值 `T` 表示目录存在于路径中,返回 `NIL` 表示目录不在路径中。
  18. ;;;
  19. ;;; 【实现逻辑 / implementation logic】
  20. ;;; 1. 如果 `DIR` 和 `PATH` 都有效,执行以下操作:
  21. ;;; 2. 如果需要加载 ARX 库,则将路径中的斜杠(`/`)替换为反斜杠(`\`)。
  22. ;;; 3. 将 `DIR` 和 `PATH` 转换为大写字母(使用 `XSTRCASE`)。
  23. ;;; 4. 检查路径中是否包含分号,如果没有,则添加分号。
  24. ;;; 5. 检查目录路径的末尾是否包含反斜杠(`\`),如果没有,则为目录添加一个反斜杠。
  25. ;;; 6. 使用 `WCMATCH` 函数检查路径中是否包含目录,若包含则返回 `T`,否则返回 `NIL`。
  26. ;;;
  27. ;;; 【示例 / example】
  28. ;;;     (XD::FILENAME:DIR-ON-PATH "C:\\MyFolder" "C:\\Program Files;C:\\MyFolder;C:\\Windows")
  29. ;;;     该调用检查 `C:\\MyFolder` 是否在给定的路径中,若在则返回 `T`,否则返回 `NIL`。
  30. ;;;
  31. ;; ------------------------------------------------------------------------

  32. (defun XD::FILENAME:DIR-ON-PATH (DIR PATH / DIR2 FLAG)
  33.   ;; 如果目录和路径都有效
  34.   (if (and DIR PATH)
  35.     (progn
  36.       ;; 如果需要加载 ARX 库,则将路径中的斜杠替换为反斜杠
  37.       (if (XD::INIT:FORCE-LOAD-ARX-LIB)
  38.         (progn
  39.           (setq DIR (XD::STR:REPLACE "/" "\\" DIR))   ;; 替换目录中的斜杠
  40.           (setq PATH (XD::STR:REPLACE "/" "\\" PATH)) ;; 替换路径中的斜杠
  41.         )
  42.       )
  43.       
  44.       ;; 将目录和路径转换为大写字母
  45.       (setq DIR (XSTRCASE DIR))
  46.       (setq PATH (XSTRCASE PATH))
  47.       
  48.       ;; 如果路径的开始没有分号,则添加分号
  49.       (if (/= ";" (substr PATH 1 1))
  50.         (progn
  51.           (setq PATH (strcat ";" PATH)) ;; 在路径前加上分号
  52.         )
  53.       )
  54.       
  55.       ;; 如果路径的末尾没有分号,则添加分号
  56.       (if (/= ";" (substr PATH (strlen PATH) 1))
  57.         (progn
  58.           (setq PATH (strcat PATH ";")) ;; 在路径后加上分号
  59.         )
  60.       )
  61.       
  62.       ;; 如果目录路径的末尾没有反斜杠,则添加反斜杠
  63.       (if (= "\\" (substr DIR (strlen DIR)))
  64.         (progn
  65.           (setq DIR2 (substr DIR 1 (- (strlen DIR) 1))) ;; 去掉目录末尾的反斜杠
  66.         )
  67.         (progn
  68.           (setq DIR2 (strcat DIR "\\")) ;; 在目录末尾添加反斜杠
  69.         )
  70.       )
  71.       
  72.       ;; 检查路径中是否包含目录,若包含则设置 FLAG 为 T
  73.       (setq FLAG (or (wcmatch PATH (strcat "*;" DIR ";*"))
  74.                      (wcmatch PATH (strcat "*;" DIR2 ";*"))
  75.                  )
  76.       )
  77.     )
  78.   )
  79.   
  80.   ;; 返回 FLAG,即检查目录是否存在于路径中
  81.   FLAG
  82. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-7 06:14 , Processed in 0.314336 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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