首页 文章

VBS在接近尾声时减速

提问于
浏览
1

我有这个脚本用于将我的文件副本压缩到网络驱动器 . “处理”对话框显示正在复制的文件,我注意到该过程似乎一开始就非常快速地通过文件,但随后在最后20%左右减速(从进度条判断) . 我在W7 32和64位上都注意到了这一点 . 一些只有几K的文本文件可能需要一两分钟 .

这是正常的,还是我的脚本中有什么东西可能导致减速?

'Target directory
ZipFile = "Z:\MyDocsBU\MyDocsBackup_" & Right("0" & DatePart("m",Now()),2) & Right("0" & DatePart("d",Now()),2) & DatePart("yyyy",Now()) & ".zip"

'Check for source folder on file
set filesys = CreateObject("Scripting.FileSystemObject")

If filesys.FileExists("Z:\MyDocsBU\SourceFolder.txt") Then
    set objFileToRead = CreateObject("Scripting.FileSystemObject").OpenTextFile("z:\MyDocsBU\SourceFolder.txt", 1, true)
    setDirectory = objFileToRead.ReadAll()
    objFileToRead.Close
    Set objFileToRead = Nothing
    SourceFolder = InputBox("You are about to back up:", "Source Folder", setDirectory)

Else
    'Source directory with user input first time only
    Set objFileToWrite = CreateObject("Scripting.FileSystemObject").OpenTextFile("Z:\MyDocsBU\SourceFolder.txt",2,true)

    SourceFolder = InputBox("Please enter the folder directory to back up." & vbCrLf & vbCrLf & "Example:" & vbCrLf & "C:\Users\your.name\Documents", "Source Folder", "C:\Users\")
    If SourceFolder = "" Then
        Wscript.Quit
    Else
        objFileToWrite.Write(SourceFolder)
        objFileToWrite.close
    End If

End If

Const FOF_CREATEPROGRESSDLG = &H0&

' Create empty ZIP file and open for adding
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set zip = CreateObject("Shell.Application").NameSpace(ZipFile)

' Get items in source folder
Set sourceItems = CreateObject("Shell.Application").NameSpace(SourceFolder).Items

' Add all files/directories to the .zip file and show progress bar
zip.CopyHere(sourceItems), FOF_CREATEPROGRESSDLG

'Wait for items to be copied, hides behind progress bar
wscript.echo "Wait until progress bar closes before clicking OK."

1 回答

  • 0

    这可能是由于写缓存造成的 . Windows首先将文件缓冲到内存中,然后从那里缓冲到目标目标 . 这样做的主要好处是,如果应用程序等待文件写入,它会提前通知并可以继续 . 如果目标驱动器的写入速度比在Windows 7中读取的源要慢得多,则会导致您描述的行为 . 通常,文件的复制速度远远高于技术上可能的速度(200 MB / s到USB 2.0驱动器等) . 进度条基于复制的数据总量,因此开始时收益将很大 . 由于复制作业所花费的时间并没有真正通过这种方法得到改善,因此一旦缓存被填满,最终的减速是不可避免的 .

    您只需手动启动相同的副本就可以轻松检查脚本是否有问题,但是当您使用Windows资源管理器文件副本时我仍然怀疑您脚本中的任何内容都有问题 .

相关问题