创建文件夹和子文件夹
你好我创建了一个lisp例程,该例程绘制PDF并根据客户机将其保存到某个文件夹中。作为扩展,我想为从块中提取的客户机的每个工作创建一个文件夹。我已经设法使用这些信息创建了一个文件夹,但需要两种不同类型的PDF,我想再次将其拆分为两个不同的文件夹。
我遇到的问题是创建这两个子文件夹。
文件夹结构应为“C:\\Users\\“UName”\\Documents\\PDF的\\Client A\\”作业名,然后在此文件夹中还有另外两个文件夹,一个称为Issue,另一个称为Check Print。我试图创建这两个子文件夹,但没有运气,但程序运行良好,没有任何错误。
我猜是因为在绘图时,lisp创建了带有JobName的文件夹,但无法验证它是否存在,然后在JobName文件夹中创建子文件夹。我可能错了,但经过一些搜索后,我能在网上找到的唯一帮助就是创建一个文件夹或要求用户输入的东西。lisp背后的想法是向用户询问一些最小的问题,如图纸大小、颜色或单色打印等,并自动完成其余部分,因此我真的不想再添加另一个对话框,让用户输入保存PDF的位置,因为这将无法解决问题。
(defun ClientProjectFolder ( / UName SJobDesc1 SJobDesc2 SJobDesc3 SPN ClientProjectFolderName ClientProjectFolderNameCP ClientProjectFolderNameIssue)
(setq UName (getenv "UserName"))
(setq SJobDesc1 (showattvalue "PW_TITLE" "JOB_DESC"))
(setq SJobDesc2 (showattvalue "PW_TITLE" "JOB_DESC2"))
(setq SJobDesc3 (showattvalue "PW_TITLE" "JOB_DESC3"))
(setq SPN (strcat SJobDesc1 " " SJobDesc2 " " SJobDesc3))
(setq ClientProjectFolderName (strcat "C:\\Users\\" UName "\\Documents\\PDF's\\ClientA\\" SPN))
(vl-mkdir ClientProjectFolderName)
T
(setq ClientProjectFolderNameCP (strcat "C:\\Users\\" UName "\\Documents\\PDF's\\ClientA\\" SPN "\\Check Print\\"))
(vl-mkdir ClientProjectFolderNameCP)
T
(setq ClientProjectFolderNameIssue (strcat "C:\\Users\\" UName "\\Documents\\PDF's\\ClientA\\" SPN "\\Issue\\"))
(vl-mkdir ClientProjectFolderNameIssue)
T
)
如果我创建的一些变量不匹配,请原谅,我只是快速更改了名称,因为它们是客户端名称。 此功能应根据需要执行:创建目录 嗨,李,
我试过几种不同的方法,但都没能成功。它不会在调用中使用用户定义的变量吗。
(LM:createdirectory "C:\\Users\\" UName "\\Documents\\PDF's\\ClientA\\" SPN "\\Check Print")
我需要能够在用户文档中创建目录,这不是一个常数,以及项目名称,这将永远是不同的。 您需要了解strcat函数 我使用了strcat,但它不起作用,但我已经解决了这个问题。我在属性“JOB\u DESC2”和“JOB\u DESC3”上测试它的图形是空白的,这导致创建任何超过SPN变量的内容停止。这些属性并不总是填充的,在我测试的示例中它们是完全空白的。如果这些变量是空白的,有没有办法让它工作,因为我真的不想忽略它们,因为无论它们是否包含任何信息,都是50/50。 好的,因为属性是空的,我用“”来隔开属性,这就是问题的根源。是否有替代使用“”的方法,但仍会在属性之间留出一个空间。 检查空格并使用其他类似-or 不确定OP所说的“空白”是什么意思。但缺失的(showattvalue)函数很可能返回nil。
(setq SPN
(vl-string-trim
" "
(strcat
(if SJobDesc1 SJobDesc1 "") ; Assumption: SJobDesc1 is either nil or a string.
" "
(if SJobDesc2 SJobDesc2 "")
" "
(if SJobDesc3 SJobDesc3 "")
)
)
)
(if (/= "" SPN)
(setq SPN (strcat SPN "\\"))
)
...
(strcat "C:\\Users\\" UName "\\Documents\\PDF's\\ClientA\\" SPN "Check Print\\")
... 我可能会建议:
(setq SPN
(substr
(strcat
(if (member SJobDesc1 '(nil "")) "" (strcat " " SJobDesc1))
(if (member SJobDesc2 '(nil "")) "" (strcat " " SJobDesc2))
(if (member SJobDesc3 '(nil "")) "" (strcat " " SJobDesc3))
)
2
)
)以避免可能的双空格。 伙计们,我刚刚抽出时间来试一下你们的建议,现在效果很好。
谢谢你的帮助!!!
页:
[1]