本帖最后由 自贡黄明儒 于 2022-9-24 13:50 编辑
;;关于startapp执行dos路径
;;响应baitang36要求发此文
;;startapp有弹窗,我不喜欢。但对于大量循环,ET中的spin似乎也不管用,用户还认为
;;死机了,多半会去按ESC键。用startapp弹窗,倒不失一个办法
;;下面用一个不正确写,不断弹窗,表示并未死机
- (startapp "cmd.exe /c del/f D://1.txt");不断弹窗,表示并未死机
;;话扯远了,还是说路径。
;;当文件夹或者文件名上有空格,不能正确执行。如
(startapp "cmd.exe /c del/f D:\\00 00\\1 1.txt")
;;看起来正确,但不能删除文件“1 1.txt”
;;【随风】用如下办法可以成功删除
(setq fileName (vlax-get-property (vlax-invoke-method (vlax-get-or-create-object
"scripting.filesystemobject") 'GetFile "D:\\00 00\\1 1.txt") 'ShortPath))
(startapp (strcat "cmd.exe /c del/f " fileName))
;;这个短文件名可以在dos窗口,用dir/x可以查看。但我试验有一次不能正确的取得短文件名,下面是对文件或者文件加
引号来实现
;;这是一个很牛的分割法(基本同parse8 parse12 parse14),容易理解
;;delim是一个字符串集合,其中的每一个字符都会被当作是分割符号 by qjchen@gmail.com
;;如 (parse4 "符号25 35 45 ; 55, 66 " " ;")=> ("符号25" "35" "45" "55," "66")
;;(parse4 "aa ,10 b.10x20,.2" ",.")("aa " "10 b" "10x20" "2")
;;(parse4 "aa 10 b10x20.2" " ")("aa" "10" "b10x20.2")
;;(parse4 "aa 10 b10x20.2" "")("aa 10 b10x20.2")
(defun parse4 (str delim / L1 L2)
(setq str (vl-string->list str)
delim (vl-string->list delim)
)
(while str
(if (not (member (car str) delim))
(setq l1 (cons (car str) l1))
(if l1
(setq l2 (cons (vl-list->string (reverse l1)) l2)
l1 nil
)
)
)
(setq str (cdr str))
)
(if l1
(setq l2 (cons (vl-list->string (reverse l1)) l2))
)
(reverse l2)
)
(defun _Princ1Path (path / L a)
;;以\分割字符串
(setq path (parse4 path "\\"))
(setq path (mapcar (function (lambda (x)
(if (VL-STRING-SEARCH " " x)
(VL-PRIN1-TO-STRING x)
x
)
)
)
path
)
)
(setq L "")
(while (setq a (car path) path (cdr path))
(setq L (strcat L a "\\"))
)
(strcat L a)
)
|