TheMadCADer 发表于 2022-7-5 18:31:47

在proje中打开特定文件夹

我的目标是制作一些快捷键,用于打开我在项目中经常访问的文件夹。我的AutoLISP能力非常有限,但我能够对这段代码进行符号化,这段代码适用于一个特定场景。
 
 

(defun c:PICS ()
(setq PicsPath1 (vl-string-right-trim "\\Dwgs\\" (getvar "dwgprefix")))
(setq PicsPath2 (strcat PicsPath1 "\\Photos\\"))
(startapp "explorer" PicsPath2)
(princ)
)

 
 
我的项目文件夹结构基本如下:
 

N:\project name\correspondences
            \docs
            \dwgs
                   \ByOthers
                   \exhibits
                   \ImpPlans
                            \On-Site
                            \Off-Site
                   \profiles
            \photos
            \points

 
 
我打算用上面的代码打开“\照片”文件夹。我的所有图形文件都在“N:\project name\dwgs”或更高版本中。更深一层是我的代码有问题的地方。它仅适用于“N:\project name\dwgs”中的图形,但不适用于任何较深的图形,例如“N:\project name\dwgs\examples”或“N:\project name\dwgs\impplan\Off-Site”。
 
我发现我的代码在将“\照片”文件夹放入路径之前只修剪了“\ dwg”文件夹。我需要修剪“\ dwg”及其以外的所有内容。我认为它可能是通配符这样简单的东西,但在阅读了几天的帖子后,我仍然没有弄明白这一点。
 
感谢您的任何帮助!

Lee Mac 发表于 2022-7-5 18:50:19

请注意在该任务中使用字符串修剪函数-此类函数不是搜索提供的模式,而是删除给定集中的所有字符,例如:
_$ (vl-string-trim "abc" "aaabbbcccaaa")
""

Lee Mac 发表于 2022-7-5 19:12:01

我建议你这样开始:
(defun c:pics   nil (myexplore "photos\\"))
(defun c:points nil (myexplore "points\\"))
(defun c:odwgsnil (myexplore "dwgs\\byothers\\"))

(defun getroot ( / dir pos )
   (setq dir (strcase (getvar 'dwgprefix) t)
         pos (vl-string-search "\\dwgs\\" dir)
   )
   (if pos
       (substr dir 1 pos)
       (prompt "\nCurrent directory does not have a \"dwgs\" folder.")
   )
)
(defun explore ( dir )
   (if (vl-file-directory-p dir)
       (startapp "explorer" dir)
       (prompt (strcat "\n\"" dir "\" not found."))
   )
)
(defun myexplore ( fld / dir )
   (if (setq dir (getroot)) (explore (strcat dir "\\" fld)))
   (princ)
)

TheMadCADer 发表于 2022-7-5 19:22:44

 
 
 
非常感谢李!我知道你们中的一个人会给我指出一个更复杂的方向。这正是我需要的。我甚至已经添加了几个其他文件夹。
 
现在我将分析并找出它是如何工作的!

Lee Mac 发表于 2022-7-5 19:45:32

不客气!我很高兴代码按预期工作。
 
如果您对它的运行方式有任何疑问,请随时提问。
 
页: [1]
查看完整版本: 在proje中打开特定文件夹