如何穷尽文件夹
有时文件夹里有很多文件都是汇总来的,文件名千奇百怪,我想用LISP方法把它们都改为大写或小写,可文件夹里又有很多子文件夹,如何穷尽文件夹,以下是我写的一断程序它只能执行到目录的下一级目录,再往下就解决不了望高手赐教;;文件夹内文件夹及文件名统改大写
(defun C:GWJDX (/ bbp mb mb1 newm i)
(setq bbq (qf_getFolder "选择文件夹:"))
(if bbq
(progn
(setq bbp (vl-directory-files bbq))
(setq bbp (cdr (cdr bbp)))
(setq i 0)
(repeat (length bbp)
(setq mb (nth i bbp))
(setq mb1 (strcat bbq "\\" mb))
(if (vl-file-directory-p mb1) (gml mb1))
(setq newm (strcase mb))
(vl-file-rename mb1 (strcat bbq "\\" newm))
(setq i (1+ i))
)
)
(princ "没有选中文件夹!")
)
(princ)
)
;;
(defun gml(mb1)
(setq mlf (vl-directory-files mb1))
(setq mlwj(cdr (cdr mlf)))
(setq a 0)
(repeat (length mlwj)
(setq xwj(nth a mlwj))
(setq qxwj(strcat mb1 "\\" xwj))
(setq xwjm(strcat mb1 "\\" (strcase xwj)))
(vl-file-rename qxwj xwjm)
(setq a(1+ a))
)
)
;;qf_getFolder 引至明经社区
(defun qf_getFolder (msg / WinShell shFolder path catchit)
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
(setq
catchit (vl-catch-all-apply
'(lambda ()
(setq shFolder (vlax-get-property shFolder 'self))
(setq path (vlax-get-property shFolder 'path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
)
本帖最后由 作者 于 2006-6-28 8:02:19 编辑 <br /><br /> <P>采用递规,编程思路如下:其中vtype是判断是文件还是目录,需另外定义.(getfilesb dir)为读取dir中的文件和目录成表,也需另外定义</P>
<P>(defun getfiles (dir / out)</P>
<P> (getfilesa dir)</P>
<P> out</P>
<P>)</P>
<P>(defun getfilesa (dir / files )</P>
<P> (cond</P>
<P> ( (= 'file (vtype dir)) (setq out (cons dir out)))</P>
<P> ( (= 'dir (vtype dir))</P>
<P> (if (setq files (getfilesb dir))</P>
<P> (mapcar 'getfilesa files)</P>
<P> )</P>
<P> )</P>
<P> ( t )</P>
<P>) )</P> 老大不行啊,想法很好但办不到,再帮忙看看给点具体的。 本帖最后由 作者 于 2006-6-29 10:20:58 编辑 <br /><br /> <P>(defun getfiles (dir / out)<BR> (getfilesa dir)<BR> out<BR>)<BR>(defun getfilesa (dir / files )<BR> (cond<BR> ( (null dir))<BR> ( (vl-file-directory-p dir)<BR> (if (setq files (vl-directory-files dir))<BR> (progn<BR> (setq files (vl-remove "." files))</P>
<P> (setq files (vl-remove ".." files))<BR><BR> (mapcar 'getfilesa (mapcar '(lambda (x) (strcat dir "/" x)) files))<BR> ) ) ) <BR> ( t (setq out (cons dir out))) <BR>) )</P> 谢谢!!这次可以了
页:
[1]