UWSCでforfilesもどき

元ネタはUWSC掲示板のNo.4853

いやもうそれ書いちゃおうよっていうね

Forfiles.Params() にforfilesっぽい引数を渡すと該当するファイルのオブジェクトが入った配列を返すよ
削除したい、ってあったので削除用の関数だけ用意してみた
あとは必要に応じて好きにしたらいい…!


files = Forfiles.Params("D:\temp", "*", -30, TRUE)

Forfiles.Print( files )
Forfiles.Delete( files )


module Forfiles
    function Params(path, mask = "*", dd = 0, subdir = FALSE)
        result = safearray(0, -1)
        fso = createoleobj(PROGID_FILESYSTEMOBJECT)
        if fso.FolderExists(path) then
            dir = fso.GetFolder(path)
            getFiles(dir, result, mask, dd, subdir)
        endif
    fend

    procedure getFiles(oDir, var array, mask, dd, sub)
        files = getdir(oDir.Path, mask)
        d = gettime(dd)
        for i = 0 to files - 1
            f = oDir.Files.item( GETDIR_FILES[i] )
            dlm = formatDateTime( f.DateLastModified )
            select TRUE
                case dd < 0
                    add = d > gettime(0, dlm)
                case 0 < dd
                    add = d < gettime(0, dlm)
                default
                    add = TRUE
            selend
            if add then
                index = resize(array, length(array))
                array[index] = f
            endif
        next
        if sub then
            for i = 0 to getoleitem(oDir.SubFolders) - 1
                getFiles(ALL_OLE_ITEM[i], array, mask, dd, sub)
            next
        endif
    fend

    Procedure Print(col)
        for i = 0 to length(col) - 1
            print col[i].Path
        next
    fend

    Procedure Delete(col)
        for i = 0 to length(col) - 1
            print col[i].Delete
        next
    fend

    function formatDateTime(strDateTime)
        date = split(token(" ", strDateTime), "/")
        time = split(strDateTime, ":")
        result = ""
        for i = 0 to length(date) - 1
            result = result + replace( format( val(date[i]), 2), " ", "0")
        next
        for i = 0 to length(time) - 1
            result = result + replace( format( val(time[i]), 2), " ", "0")
        next
    fend
    
    const PROGID_FILESYSTEMOBJECT = "Scripting.FileSystemObject"
endmodule

forfilesは /d で yyyy/mm/dd を受けたり出来ることに途中で気付いたけど、これは /d dd (n日以前、n日以降)だけしか出来ません!
残念!残念!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中