請教如何復制當前檔案夾下所有檔案及檔案夾到指定檔案夾下如果檔案、檔案夾修改過以最新覆寫舊的(不詢問是否覆寫),如果沒修改則不復制。
例如:復制D盤Font檔案夾下的所有檔案和檔案夾(假設該檔案夾下有子檔案夾),復制到E盤Fonts備份檔案下如何實作上述效果。
在網上沒有搜索到相關答案,懇請有人百忙之下解決。
uj5u.com熱心網友回復:
復制帖子《怎樣取得各級子目錄下的檔案名(包含全路徑)》中的 SearchFiles() 函式。Option Explicit
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAbortedLo As Integer
fAnyOperationsAbortedHi As Integer
hNameMappingsLo As Long
hNameMappingsHi As Long
lpszProgressTitleLo As Long
lpszProgressTitleHi As Long
End Type
Private Const FO_COPY = &H2
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_NOCONFIRMMKDIR = &H200
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
'復制檔案時按需要會自動創建目錄'
Function FileCopyAutoMkDir(sSrc As String, sDst As String) As Boolean
Dim fo As SHFILEOPSTRUCT
Dim r As Long
fo.wFunc = FO_COPY
fo.pFrom = sSrc
fo.pTo = sDst
fo.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR
r = SHFileOperation(fo)
FileCopyAutoMkDir = (f = 0)
End Function
Sub Main()
Dim colFiles As Collection
Dim sSrcFile As String
Dim sDstFile As String
Dim bIsSame As Boolean
Dim i As Long
Set colFiles = SearchFiles("D:\Font\")
For i = 1 To colFiles.Count
sSrcFile = colFiles(i)
sDstFile = Replace(sSrcFile, "D:\Font\", "E:\Fonts\")
If LenB(Dir(sDstFile)) = 0 Then
bIsSame = False
ElseIf FileDateTime(sSrcFile) <> FileDateTime(sDstFile) Then
bIsSame = False
Else
bIsSame = True
End If
If Not bIsSame Then
FileCopyAutoMkDir sSrcFile, sDstFile
End If
Debug.Print sSrcFile
Next
End Sub
uj5u.com熱心網友回復:
樓主究竟是要“批處理”來處理,還是用VB6程式來處理?
如果VB6程式處理,你的想法是可以實作的。
但如果是“批處理”(DOS命令),它好像沒法判斷“是否更新”過的吧?
是否“新增”的,倒是能夠判斷。
uj5u.com熱心網友回復:
搜“robocopy”轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/88063.html
標籤:VB基礎類
下一篇:串口發送資料問題
