這侽孓譙悴丶 发表于 2014-9-20 21:15:19

rm不是内部命令或可执行文件或批处理文件什么的,何解?

使用以下代码自动清除指定后缀的文件,DOS窗口提示rm不是内部命令或可执行文件或批处理文件什么的,何解?

axlCmdRegister( "cam clear" 'camclear?cmdType "general")
defun( camclear ()
shell("rm./*,*")
shell("rm./*.log")
shell("rm ./art_aper.txt")
shell("rm ./art_param.txt")
shell("rm ./nc_param.txt")
shell("rm ./*.val")
shell("rm ./*.tag")
shell("rm ./*.tap")
shell("rm ./*.art")
shell("rm ./*.jrl")
shell("rm ./*.out")
shell("rm ./*.afa")
printf("\n###On current directory *,* *,log*.val *.tag *.tap *.art *.jrl \n")
printf("###nc_param.txt art_param.txt art_aper.txt *.out *.afa\n###CLEAR is finished ====\n")
);end-defun camclear


XYX365 发表于 2014-9-23 11:19:02

本帖最后由 XYX365 于 2014-9-23 11:21 编辑

我已寫好一個skill,如下供參考
axlCmdRegister( "cam clear" 'fnCamClear)
procedure(fnCamClear()
    let((lDeleteFile tFile x tFileName)
            ;讀取目前工作目錄下的檔案為下列的檔案並刪除
            ;*.*,**.log*.val *.tag *.tap *.art *.jrl *.out *.afa art_aper.txt art_param.txt nc_param.txt
            lDeleteFile = nil ;存放要刪除的檔案名稱
            foreach(tFile setof(x getDirFiles(getWorkingDir()) fnCheckFile(x))
                  lDeleteFile = cons(tFile lDeleteFile)
            )
            when(lDeleteFile
                  foreach(tFile lDeleteFile
                            tFileName = strcat(getWorkingDir() "/" tFile)
                            when(isFile(tFileName) && isReadable(tFileName)
                                    deleteFile(tFileName)
                            )
                  )
            )
            ;printf("\n###On current directory *,* *,log*.val *.tag *.tap *.art *.jrl \n")
            ;printf("###nc_param.txt art_param.txt art_aper.txt *.out *.afa\n###CLEAR is finished ====\n")
    )
)

;此函數的功能是判斷檔案tFileName是否為下列 ,如果是就傳回 t 否則傳回 nil
;*.*,**.log*.val *.tag *.tap *.art *.jrl *.out *.afa art_aper.txt art_param.txt nc_param.txt
procedure(fnCheckFile(tFileName)
    prog((lCheckSuffix lCheckFile lString tSuffix lResult x)
               
            lCheckSuffix = list("afa" "art" "jrl" "log" "out" "tag" "tap" "val" "txt")
            lCheckFile = list("art_aper.txt" "art_param.txt" "nc_param.txt")
               
            if(stringp(tFileName) then
                  tFileName = lowerCase(tFileName)
                  ;判斷檔案名稱只要有 , 就傳回 t
                  when(rexMatchp("," tFileName)
                            return(t)
                  )
                  when(tFileName == "allegro.jrl" ;此檔案在Allegro執行中是不能刪除的,
                            return(nil)
                  )
                  lString = parseString(tFileName ".")
                  if(lString then
                            tSuffix = cadr(lString)
                            lResult = setof(x lCheckSuffix (x == tSuffix)) ;過濾後綴名稱有一樣
                            if(lResult then
                                    when(car(lResult) == "txt"
                                          lResult = setof(x lCheckFile (x == tFileName)) ;過濾檔案名稱有一樣
                                    )
                                    if(lResult then
                                          return(t)
                                    else
                                          return(nil)
                                    )
                            else
                                    return(nil)
                            )
                  else
                            return(nil)
                  )
            else
                  return(nil)
            )
    )
)

XYX365 发表于 2014-9-22 10:35:03

這侽孓譙悴丶 发表于 2014-9-21 14:05
版主,找不到你说的deleteFile这个函数啊··,能否提供个简单的例子参考下···谢谢啦~

;讀取目前工作目錄下的檔案為1.txt 和 2.art 並刪除這兩個檔案
lDeleteFile = nil
foreach(tFile setof(x getDirFiles(getWorkingDir()) (cadr(parseString(x ".")) == "txt" || cadr(parseString(x ".")) == "art"))
        when(car(parseString(tFile ".")) == "1"
                lDeleteFile = cons(tFile lDeleteFile)
        )
        when(car(parseString(tFile ".")) == "2"
                lDeleteFile = cons(tFile lDeleteFile)
        )
        when(lDeleteFile
                foreach(tFile lDeleteFile
                        tFileName = strcat(getWorkingDir() "/" tFile)
                        when(isFile(tFileName)
                                deleteFile(tFileName)
                        )
                )
        )
)

XYX365 发表于 2014-9-21 07:27:04

改 del 就可以, 因為rm是unix

這侽孓譙悴丶 发表于 2014-9-21 09:00:07

XYX365 发表于 2014-9-21 07:27
改 del 就可以, 因為rm是unix

把代码中的rm改成 del 吗?

這侽孓譙悴丶 发表于 2014-9-21 09:30:19

本帖最后由 這侽孓譙悴丶 于 2014-9-21 09:32 编辑

XYX365 发表于 2014-9-21 07:27
改 del 就可以, 因為rm是unix
xlCmdRegister( "cam clear" 'camclear?cmdType "general")
defun( camclear ()
shell("del./*,*")
shell("del./*.log")
shell("del ./art_aper.txt")
shell("del ./art_param.txt")
shell("del ./nc_param.txt")
shell("del ./*.val")
shell("del ./*.tag")
shell("del ./*.tap")
shell("del ./*.art")
shell("del ./*.jrl")
shell("del ./*.out")
shell("del ./*.afa")
printf("\n###On current directory *,* *,log*.val *.tag *.tap *.art *.jrl \n")
printf("###nc_param.txt art_param.txt art_aper.txt *.out *.afa\n###CLEAR is finished ====\n"));end-defun camclear


改成del也没法删除文件,DOS窗口提示:无效开关-“*”、参数格式不正确-“t_aper.txt”等

vivienluo 发表于 2014-9-21 09:56:10

楼主为何不用deleteFile函数直接删除文件?

這侽孓譙悴丶 发表于 2014-9-21 09:57:54

vivienluo 发表于 2014-9-21 09:56
楼主为何不用deleteFile函数直接删除文件?

:lol版主终于出现了,这个函数的格式是?没发现这个

這侽孓譙悴丶 发表于 2014-9-21 14:05:03

vivienluo 发表于 2014-9-21 09:56
楼主为何不用deleteFile函数直接删除文件?

版主,找不到你说的deleteFile这个函数啊··,能否提供个简单的例子参考下···谢谢啦~

vivienluo 发表于 2014-9-21 15:18:14

deleteFile("e:/1.txt") 删除文件e:/1.txt。
可结合一下一些函数操作目录:
deleteDir, isFile, isDir

這侽孓譙悴丶 发表于 2014-9-21 15:29:42

vivienluo 发表于 2014-9-21 15:18
deleteFile("e:/1.txt") 删除文件e:/1.txt。
可结合一下一些函数操作目录:
deleteDir, isFile, isDir

哪个函数可以删除当前目录下制定的文件呢?

vivienluo 发表于 2014-9-21 15:32:31

這侽孓譙悴丶 发表于 2014-9-21 15:29
哪个函数可以删除当前目录下制定的文件呢?

:L 这个你就自己多研究研究了。结合参考以下函数。。。
http://www.allegro-skill.com/thread-3588-1-1.html
页: [1] 2
查看完整版本: rm不是内部命令或可执行文件或批处理文件什么的,何解?