這侽孓譙悴丶 发表于 2014-9-21 15:35:56

vivienluo 发表于 2014-9-21 15:32
这个你就自己多研究研究了。结合参考以下函数。。。
http://www.allegro-skill.com/thread-3588-1-1. ...

好吧,我先自己 折腾折腾,弄不出来再求救

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)
                        )
                )
        )
)

這侽孓譙悴丶 发表于 2014-9-22 20:58:54

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

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

非常感谢,试过可以了,但如果我想删除当前目录下后缀为.txt或后缀为.art的文件使用通配符*为什么不起作用呢?代码如下:lDeleteFile = nil
foreach(tFile setof(x getDirFiles(getWorkingDir()) (cadr(parseString(x ".")) == "txt" || cadr(parseString(x ".")) == "art"))
      when(car(parseString(tFile ".")) == "*"
                lDeleteFile = cons(tFile lDeleteFile)
      )
      when(car(parseString(tFile ".")) == "*"
                lDeleteFile = cons(tFile lDeleteFile)
      )
      when(lDeleteFile
                foreach(tFile lDeleteFile
                        tFileName = strcat(getWorkingDir() "/" tFile)
                        when(isFile(tFileName)
                              deleteFile(tFileName)
                        )
                )
      )
)


XYX365 发表于 2014-9-23 07:41:45

本帖最后由 XYX365 于 2014-9-23 07:43 编辑

這侽孓譙悴丶 发表于 2014-9-22 20:58
非常感谢,试过可以了,但如果我想删除当前目录下后缀为.txt或后缀为.art的文件使用通配符*为什么不起作 ...
lDeleteFile = nil
foreach(tFile setof(x getDirFiles(getWorkingDir()) (cadr(parseString(x ".")) == "txt" || cadr(parseString(x ".")) == "art"))
         lDeleteFile = cons(tFile lDeleteFile) ;刪除*.txt 和 *.art
)
when(lDeleteFile
         foreach(tFile lDeleteFile
                   tFileName = strcat(getWorkingDir() "/" tFile)
                   when(isFile(tFileName)
                            deleteFile(tFileName)
                   )
         )
)


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)
            )
    )
)

這侽孓譙悴丶 发表于 2014-9-24 00:20:42

XYX365 发表于 2014-9-23 11:19
我已寫好一個skill,如下供參考

Allegro有时候会产生一个*.run的文件夹,要加入删除这个文件夹得怎么修改,还要我想加多删除一个*_xy.txt的文件改如何加,我试过几次都没成功。太菜了我,刚学习编写SKILL

XYX365 发表于 2014-9-24 08:25:10

這侽孓譙悴丶 发表于 2014-9-24 00:20
Allegro有时候会产生一个*.run的文件夹,要加入删除这个文件夹得怎么修改,还要我想加多删除一个*_xy.txt ...

如下代碼供參考
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
                ;增加刪除目錄*.run 和檔案 *_xy.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" "run")
                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
                                        ;加入判斷後綴名稱為 run ,這裡只有判斷一層子目錄而已.
                                        when(car(lResult) == "run"
                                                ;判斷是否為目錄
                                                when(isDir(tFileName)
                                                        ;先取的目錄下所有的檔案和目錄,並先直接刪除後,在刪除此目錄
                                                        bDelDirMaster = t
                                                        foreach(tOne setof(x getDirFiles(tFileName) !((x == ".") || (x == ".."))) ;tOne = nth(0 setof(x getDirFiles(tFileName) !((x == ".") || (x == ".."))))
                                                                tTemp = strcat(getWorkingDir() "/" tFileName "/" tOne)
                                                                if(isDir(tTemp) then ;在判斷子目錄,並在取的目錄下所有的檔案和目錄,並先直接刪除
                                                                        bDeleteDir = t
                                                                        foreach(tSubOne setof(x getDirFiles(tTemp) !((x == ".") || (x == "..")))
                                                                                tTempSub = strcat(getWorkingDir() "/" tFileName "/" tOne "/" tSubOne)
                                                                                if(isDir(tTempSub) then
                                                                                        printf("E-Cannot delete %L\n" tTempSub)
                                                                                        bDeleteDir = nil
                                                                                else
                                                                                        when(isFile(tTempSub)
                                                                                                deleteFile(tTempSub)
                                                                                        )
                                                                                )
                                                                        )
                                                                        when(bDeleteDir
                                                                                deleteDir(tTemp)
                                                                        )
                                                                else
                                                                        ;判斷為檔案
                                                                        when(isFile(tTemp)
                                                                                deleteFile(tTemp)
                                                                        )
                                                                )
                                                        )
                                                        deleteDir(tFileName)
                                                )
                                                return(nil)
                                        )
                                        when(car(lResult) == "txt"
                                                lResult = setof(x lCheckFile (x == tFileName)) ;過濾檔案名稱有一樣
                                                unless(lResult
                                                        when(rexMatchp("_xy$" car(lString)) ;判斷檔案名稱為*_xy.txt
                                                                return(t)
                                                        )
                                                )
                                        )
                                        if(lResult then
                                                return(t)
                                        else
                                                return(nil)
                                        )
                                else
                                        return(nil)
                                )
                        else
                                return(nil)
                        )
                else
                        return(nil)
                )
        )
)

這侽孓譙悴丶 发表于 2014-9-24 23:00:38

XYX365 发表于 2014-9-24 08:25
如下代碼供參考

谢谢楼主的代码。

发电机 发表于 2022-8-25 16:46:42

删除出 gerber文件夹下到文件
页: 1 [2]
查看完整版本: rm不是内部命令或可执行文件或批处理文件什么的,何解?