找回密码
 加入
搜索
查看: 114|回复: 7

[AU3基础] 问一个问题,备份最新文件的问题

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 668674 于 2025-2-14 20:38 编辑

; 设置源目录和备份目录的基础路径
Global $sourceDir = "C:\Users\Bjityw\Desktop\11\" ; 替换为你的源目录路径
Global $backupBasePath = "C:\Users\Bjityw\Desktop\22" ; 替换为你的备份基础路径

; 获取源目录中最新的文件
Global $latestFile = GetLatestFile($sourceDir)

If $latestFile = "" Then
    MsgBox(16, "错误", "未找到任何文件")
    Exit
EndIf

; 创建一个新的备份文件夹,格式为 YYYYMMDD_HHMMSS
Global $timeStamp = StringFormat("%04d%02d%02d", @YEAR, @MON, @MDAY)
Global $backupDir = $backupBasePath & "\" & $timeStamp

; 创建备份文件夹
DirCreate($backupDir)

; 将最新的文件复制到新的备份文件夹中
FileCopy($latestFile, $backupDir & "\" & StringTrimLeft($latestFile, StringInStr($latestFile, "\", 0, -1)))

MsgBox(64, "成功", "文件已成功备份到: " & $backupDir)

Func GetLatestFile($directory)
    Local $search = FileFindFirstFile($directory & "\*.*")
    If $search = -1 Then
        Return ""
    EndIf

    Local $latestFile = "", $latestTime = 0
    While 1
        Local $file = FileFindNextFile($search)
        If @error Then ExitLoop

        Local $filePath = $directory & "\" & $file
        Local $fileTime = FileGetTime($filePath, 0, 1)

        If $fileTime > $latestTime Then
            $latestTime = $fileTime
            $latestFile = $filePath
        EndIf
    WEnd

    FileClose($search)
    Return $latestFile
EndFunc




问题:我这个始终只备份C:\Users\Bjityw\Desktop\11\目录中产生最新的一个文件,我如何能备份当天产生的所有文件或者指定格式的所有文件?

发表于 7 天前 | 显示全部楼层
利用robocopy能很简单的满足你的要求
例如:
每隔1分钟监测C:\Users\Bjityw\Desktop\11目录内文件变动(最后修改时间>=当日),符合条件的文件自动备份到C:\Users\Bjityw\Desktop\22\当日文件夹
robocopy C:\Users\Bjityw\Desktop\11 C:\Users\Bjityw\Desktop\22\%date:~0,4%%date:~5,2%%date:~8,2% /log+:C:\%date:~0,4%%date:~5,2%%date:~8,2%.log /MIR /COPYALL /V /MOT:1 /TEE /R:5  /MAXAGE:%date:~0,4%%date:~5,2%%date:~8,2%
 楼主| 发表于 4 天前 | 显示全部楼层
本帖最后由 668674 于 2025-2-17 10:50 编辑
wbb870319 发表于 2025-2-14 22:53
利用robocopy能很简单的满足你的要求
例如:
每隔1分钟监测C:%users\Bjityw\Desktop\11目录内文件变动(最后 ...

你这个命令好,这个可以实时同步,采用CMD测试了蛮好,谢谢!
但是这个怎么采用au3来编写?


 楼主| 发表于 3 天前 | 显示全部楼层
还有人能帮忙回答下吗?
发表于 3 天前 | 显示全部楼层
本帖最后由 afan 于 2025-2-18 21:49 编辑

上面的命令行适合你的话
Local $sDirSource = 'C:\Users\Bjityw\Desktop\11'
Local $sDirDest = 'C:\Users\Bjityw\Desktop\22'
RunWait('robocopy "' & $sDirSource & '" "' & $sDirDest & '" /MIR /COPYALL /MAXAGE:' & @YEAR & @MON & @MDAY, '', 0)
MsgBox(0, '', '完成')

 楼主| 发表于 前天 17:34 | 显示全部楼层
afan 发表于 2025-2-18 19:36
上面的命令行适合你的话

但是这个并没有再C:\Users\Bjityw\Desktop\22目录新建一个当天日期的文件夹,再把数据备份到当天的文件夹内,目前这个只是把11内当天的新的文件备份到C:\Users\Bjityw\Desktop\22内,C:\Users\Bjityw\Desktop\22\20250219\   (20250219是每次备份自动生成的一个文件夹)
发表于 前天 22:42 | 显示全部楼层
668674 发表于 2025-2-19 17:34
但是这个并没有再C:%users\Bjityw\Desktop\22目录新建一个当天日期的文件夹,再把数据备份到当天的文件夹 ...

最最基础的东西都不会?
Local $sDirDest = 'C:\Users\Bjityw\Desktop\22\' & @YEAR & @MON & @MDAY
 楼主| 发表于 6 小时前 | 显示全部楼层
afan 发表于 2025-2-19 22:42
最最基础的东西都不会?
Local $sDirDest = 'C:%users\Bjityw\Desktop\22\' & @YEAR & @MON & @MDAY ...

本人不才,非常感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-2-21 20:12 , Processed in 0.073845 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表