干脆用 VBS 来做吧, 由于是无限循环, 要终止运行就 结束 WScript.exe 进程.
假设你的两个文件夹分别是 D:\x1 和 D:\x2 不是这样的话,对代码中相应改动就行了, 不然找不到目录会报错
无论用批还是用 vbs, 要适用于定时清空 x2 文件夹, 都需要一个文件列表记录文件(不能用变量, 文件太多会溢出内存)
适用于定时清空 x2 文件夹的
用创建日期和修改日期综合判断的(时间精确到秒), 这样代码还简单多了
PS: 我自己的机器上出现了不能覆盖文件的权限问题, 如果你也同样遇到, 请试试将本楼附件中的权限注册表文件导入- SrcFolder = "D:\x1"
- DstFolder = "D:\x2"
- DateCOMLast = "0-1-1 00:00:00"
- DateCOMMax = DateCOMLast
- Do
- CopyFiles SrcFolder, DstFolder, True, DateCOMLast
- WScript.Sleep 60000 ' 等待时间 单位:ms 60000=1 分钟
- Loop Until false
-
- Function CopyFiles(Src, Dst, overwrite, ByRef DateCOMLast)
- Dim fso, f, f1, fc
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.GetFolder(Src)
- Set fc = f.Files
- DateCOMMax = DateCOMLast
-
- For Each f1 in fc ' 对源目录中的每一个文件进行 创建或修改 双重日期检测, 并确定是否复制
- If DateDiff("s", DateCOMLast, f1.DateCreated) > 0 Or DateDiff("s", DateCOMLast, f1.DateLastModified) > 0 Then
- f1.Copy Dst & "\" & f1.Name, overwrite
- If DateDiff("s", DateCOMMax, f1.DateCreated) > 0 Then DateCOMMax = f1.DateCreated ' 计算一批文件中最新的创建日期
- If DateDiff("s", DateCOMMax, f1.DateLastModified) > 0 Then DateCOMMax = f1.DateLastModified ' 或最新的修改日期
- End If
- Next
- DateCOMLast = DateCOMMax ' WScript.Echo "DateCOMLast:" & DateCOMLast 完成一批新文件的复制后, 设置最新的创建或修改日期
- End Function
复制代码 用复制历史列表和存在性来决定的- SrcFolder = "D:\x1"
- DstFolder = "D:\x2"
- FnList = "c:\FileList.txt"
-
- Const ForReading = 1, ForWriting = 2, ForAppending = 8
- Set fso = CreateObject("Scripting.FileSystemObject")
- If Not (fso.FileExists(FnList)) Then
- Set FileList = fso.CreateTextFile(FnList, True)
- FileList.Close
- End If
-
- Do
- CopyFiles SrcFolder, DstFolder, True, FnList
- WScript.Sleep 60000 ' 等待时间 单位:ms 60000=1 分钟
- Loop Until false
-
- Function CopyFiles(Src, Dst, overwrite, FList)
- Dim fso, f, f1, fc
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.GetFolder(Src)
- Set fc = f.Files
-
- For Each f1 in fc ' 对源目录中的每一个文件进行 列表记录 和 实际文件 双重存在检测, 并确定是否复制
- If Not FoundFileInList(FList, f1.Name) And Not (fso.FileExists(Dst & "\" & f1.Name)) Then
- f1.Copy Dst & "\" & f1.Name, overwrite
- Set fo = fso.OpenTextFile(FList, ForAppending, False)
- fo.WriteLine f1.Name
- fo.Close
- End If
- Next
- End Function
-
- Function FoundFileInList(listspec, filespec)
- Const ForReading = 1
- Dim fso, theFile, retstring
- FoundFileInList = False
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set theFile = fso.OpenTextFile(listspec, ForReading, False)
- Do While theFile.AtEndOfStream <> True
- if theFile.ReadLine = filespec then
- FoundFileInList = True
- theFile.Close
- Exit Function
- End If
- Loop
- theFile.Close
- End Function
复制代码 不适用于定时清空 x2 文件夹的- SrcFolder = "D:\x1"
- DstFolder = "D:\x2"
- Do
- CopyFiles SrcFolder, DstFolder, false
- WScript.Sleep 60000 ' 等待 1 分钟
- Loop Until false
-
- Function CopyFiles(Src, Dst, overwrite)
- Dim fso, f, f1, fc
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.GetFolder(Src)
- Set fc = f.Files
- For Each f1 in fc
- If Not (fso.FileExists(Dst & "\" & f1.Name)) Then
- f1.Copy Dst & "\" & f1.Name, overwrite
- End If
- Next
- End Function
复制代码
[ 本帖最后由 neorobin 于 2009-12-9 14:53 编辑 ] |