我使用此脚本将文件的副本压缩到网络驱动器。 “处理”对话框显示正在复制的文件,我注意到该过程似乎一开始就非常快速地通过文件,但随后在最后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."
答案 0 :(得分:0)
这可能是由于写入缓存造成的。 Windows首先将文件缓冲到内存中,然后从那里缓冲到目标目标。这样做的主要好处是,如果应用程序等待文件写入,它会提前通知并可以继续。 如果目标驱动器的写入速度比在Windows 7中读取的源要慢得多,则会导致您描述的行为。通常,文件的复制速度远远高于技术上可能的速度(200MB / s到USB 2.0驱动器等)。进度条基于复制的数据总量,因此开始时收益将很大。由于复制作业所用的时间并没有真正通过这种方法得到改善,因此缓存填满后最终的减速是不可避免的。
您只需手动启动相同的副本就可以轻松检查脚本是否有问题,但是当您使用Windows资源管理器文件副本时我仍然怀疑您的脚本中的任何内容都是错误的。