Vbscript 将最大的文件比较/复制到新文件夹

Vbscript 将最大的文件比较/复制到新文件夹,vbscript,Vbscript,我想做的是: 将文件从单个主文件夹下的多个子文件夹复制到目标文件夹 复制时有三个选项: 如果目标文件夹中不存在文件,请复制 若文件存在,若文件大小大于目标文件,则复制 如果文件存在并且两个文件大小相同,则比较日期/时间,如果是最近的,则复制 以下是我目前为止的伪代码: Dim filesys, strSourceFile, strDestFolder, strDestFile Set filesys = CreateObject("Scripting.FileSystemObject") s

我想做的是:

  • 将文件从单个主文件夹下的多个子文件夹复制到目标文件夹
  • 复制时有三个选项:
  • 如果目标文件夹中不存在文件,请复制
  • 若文件存在,若文件大小大于目标文件,则复制
  • 如果文件存在并且两个文件大小相同,则比较日期/时间,如果是最近的,则复制
  • 以下是我目前为止的伪代码:

    Dim filesys, strSourceFile, strDestFolder, strDestFile
    
    Set filesys = CreateObject("Scripting.FileSystemObject")
    strSourceFile = S:\SoCal\Section_2\*\Autogen\texture\*.agn
    strDestFolder = F:\ADDON_SCENERY\simwestSOCAL\texture
    strDestFile = F:\ADDON_SCENERY\simwestSOCAL\texture\*.agn
    
    COPY each file in strSourceFolder
    If IsEmpty (SourceFile, DestFolder)
    Else If (SourceFile FileSize > DestFile)
    Else If (SourceFile DateTime > DestFile DateTime) 
    Then 'keep/copy most recent file
    End if
    
    我走对了吗? 我需要添加一个循环吗? 可以比较文件大小吗?我所有的研究都没有在这方面发现任何东西。 我可以将日期和时间与文件进行比较吗

    作为对我原来帖子的更新。。。(希望我正确遵守论坛规则)

    在过去的几周里,我一直在不停地阅读和测试失败测试。我很高兴地说(也有点骄傲),我已经完成了我的第一个剧本。。。它似乎按计划工作,但只针对一个文件。我现在需要将其转换为处理“sourcefolder”中的所有文件

    我有点“脑死亡”,所以任何方向的转换这将是最感激的。我知道我需要循环,但是什么类型,在哪里?我是否将引用文件的所有内容重命名为文件夹或使用“*.txt”作为文件?在此期间,我将继续学习

    这是我的脚本(是的,有很多MsgBox,所以我可以沿着脚本路径进行操作):

    dim-dFolder
    dFolder=“S:\Scripting Workfolder\destfolder\”
    暗文件
    dFile=“S:\Scripting Workfolder\destfolder\File 1.txt”
    暗文件
    sFile=“S:\Scripting Workfolder\sourcefolder\File 1.txt”
    设置fso=CreateObject(“Scripting.FileSystemObject”)
    '检查目标文件夹中是否已存在该文件
    如果不存在fso.FileExists(dFile),则
    MsgBox“文件不存在-将复制到dFolder”
    fso.CopyFile sFile,dFolder,true
    Elseif fso.FileExists(dFile)然后
    MsgBox“目标文件夹中已存在文件”
    替换大文件
    如果结束
    子替换放大器(sFile、dFile)
    const overwrite_existing=true
    dim objFSO
    设置objFSO=createobject(“Scripting.FileSystemObject”)
    模糊对象源文件
    设置objSourceFile=objFSO.GetFile(sFile)
    '暗kbSourceSize
    kbSourceSize=objSourceFile.size
    dim对象目标文件
    设置objTargetFile=objFSO.GetFile(dFile)
    'dim kbTargetSize
    kbTargetSize=objTargetFile.size
    如果kbSourceSize>kbTargetSize,则
    MsgBox“源文件较大,将覆盖到dest文件夹”
    objFSO.CopyFile objSourceFile.Path,objTargetFile.Path,覆盖现有文件
    ElseIf kbSourceSizedtmTargetFile.DateLastModified),则
    MsgBox“源文件比目标文件新-覆盖目标文件”
    objFSO.CopyFile dtmSourceFile.Path,dtmTargetFile.Path,覆盖现有文件
    其他的
    MsgBox“源文件早于目标文件-不会覆盖文件”
    如果结束
    端接头
    
    如有疑问,请阅读。是的,你需要一个循环。可能不止一个。您应该对当前文件夹中的每个文件执行循环,并对子文件夹使用递归子文件夹。如果有疑问,请阅读。是的,你需要一个循环。可能不止一个。您应该对当前文件夹中的每个文件执行循环,并对子文件夹使用递归子文件夹。
    dim dFolder 
    dFolder = "S:\Scripting Workfolder\destfolder\"
    dim dFile
    dFile= "S:\Scripting Workfolder\destfolder\File 1.txt"
    dim sFile
    sFile = "S:\Scripting Workfolder\sourcefolder\File 1.txt"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Check to see if the file already exists in the destination folder
    
    If Not fso.FileExists(dFile) Then
        MsgBox "File does not exist - will copy over to dFolder"
        fso.CopyFile sFile, dFolder, true
        Elseif fso.FileExists(dFile) Then 
        MsgBox "File already exist in destination folder determine largest"
        ReplaceIfLarger sFile, dFile
    End If
    
    Sub ReplaceIfLarger(sFile, dFile)
        const overwrite_existing = true
        dim objFSO
        set objFSO = createobject("Scripting.FileSystemObject")
    
        dim objSourceFile  
        set objSourceFile = objFSO.GetFile(sFile)
        'dim kbSourceSize
        kbSourceSize = objSourceFile.size   
    
        dim objTargetFile
        set objTargetFile = objFSO.GetFile (dFile)
        'dim kbTargetSize
        kbTargetSize = objTargetFile.size
    
        If kbSourceSize > kbTargetSize Then
        MsgBox "Source file is LARGER and will overwrite to dest folder"
        objFSO.CopyFile objSourceFile.Path, objTargetFile.Path, overwrite_existing
        ElseIf kbSourceSize < kbTargetSize Then
        MsgBox "Source file is smaller - Will not overwrite to dest folder"
        Else
        ReplaceIfNewer sFile, dFile 
        End If
    End Sub
    
    Sub ReplaceIfNewer(sFile, dFile)
        MsgBox "Both files exist and are the same size. Keep newest file"
        const overwrite_existing = true
        dim objFSO
        set objFSO = createobject("Scripting.FileSystemObject")
    
        dim dtmSourceFile  
        set dtmSourceFile = objFSO.GetFile(sFile)
    
        dim dtmTargetFile
        set dtmTargetFile = objFSO.GetFile(dFile) 
    
        If (dtmSourceFile.DateLastModified > dtmTargetFile.DateLastModified) then
        MsgBox "Source File is Newer than Target File - Overwrite Target file"
        objFSO.CopyFile dtmSourceFile.Path, dtmTargetFile.Path, overwrite_existing
        Else 
        MsgBox "Source File is Older than Target File - Will not overwrite file"
        End If
    End Sub