我想基准我们公司的操作系统,其中一个步骤是计算需要多少时间才能将某些东西复制到某处,只需在浏览器下按ctrl-c/ctrl-v 。 因此,我想知道如何将批处理中的该操作脚本化几次,以便我可以执行时间,特别是如何使复制处理弹出窗口。我认为“rundll32 shell32.dll”涉及某种方式,但我不知道如何。Windows资源管理器复制时间基准
感谢
我想基准我们公司的操作系统,其中一个步骤是计算需要多少时间才能将某些东西复制到某处,只需在浏览器下按ctrl-c/ctrl-v 。 因此,我想知道如何将批处理中的该操作脚本化几次,以便我可以执行时间,特别是如何使复制处理弹出窗口。我认为“rundll32 shell32.dll”涉及某种方式,但我不知道如何。Windows资源管理器复制时间基准
感谢
您既可以
使用直接从您的应用程序Windows用户界面自动化 API(http://en.wikipedia.org/wiki/Microsoft_UI_Automation);
,或者你可以创建一个的AutoIt脚本(http://www.autoitscript.com/site/autoit/)
你可以使用VBScript做到这一点。请参阅Folder.CopyHere method页面上的脚本示例。有趣的是,Folder.CopyHere
方法也可以将文件放入zip文件夹中。看看an example(如果没有其他原因,看看另一个真实世界的例子,如何使用CopyHere
)。与scripting.filesystemobject
复制功能不同,copyhere函数使用Windows UI API,如果存在,则提示进行替换,并显示文件复制对话框,就好像用户拖放一样。
下面是示例benchmark.vbs,将".\Ubi Caritas.mp3"
复制到%temp%
100次,然后显示该操作花费的时间(以4位精度表示),以毫秒为单位。
set wShl = CreateObject("Wscript.Shell")
tmp = wShl.ExpandEnvironmentStrings("%TEMP%")
set wShl = nothing
set oShl = CreateObject("shell.application")
set fso = CreateObject("Scripting.FileSystemObject")
set srcfile=fso.GetFile("Ubi Caritas.mp3")
dest=tmp & "\" & srcfile.Name
wscript.Echo "Testing copy speed from " & srcfile.Name & " (" & srcfile.size & " bytes) to " & dest
' single copy
msb4 = Timer
call doCopy
msafter = Timer
wscript.Echo "1 copy took " & FormatNumber(msafter - msb4, 4, -2, -2, false) & " seconds."
' 100 copies
msb4 = Timer
for i = 0 to 100
call doCopy
next
msafter = Timer
wscript.Echo "100 copies took " & FormatNumber(msafter - msb4, 4, -2, -2, false) & " seconds."
set destfile = nothing
set oShl = nothing
set fso = nothing
sub doCopy
oShl.namespace(tmp).copyhere(srcfile.Name), 16
if isEmpty(destfile) then set destfile = fso.getFile(dest)
do until destfile.size = srcfile.size
wscript.sleep 10
loop
destfile.delete
end sub
输出示例:
C:\Users\me\Desktop>cscript /nologo benchmark.vbs
Testing copy speed from Ubi Caritas.mp3 (2929371 bytes) to C:\Users\me\AppD
ata\Local\Temp\Ubi Caritas.mp3
1 copy took 0.0664 seconds.
100 copies took 4.0430 seconds.
罗霍嗨,你的脚本不能正常工作。我创造了你所描述的相同环境(与MP3文件),但它给了我“找不到文件”的错误上第32行'如果isEmpty(destfile)然后设置destfile = fso.getFile(dest)',你可以给它看看吗?谢谢 – shanti 2013-03-01 10:25:07
尝试将第二行更改为绝对位置。 'tmp =“C:\ Users \ [你的用户名] \ Appdata \ Local \ Temp”'这就是目的地。您可以通过修改'set srcfile = fso.GetFile(“[full path here]”)来更改源文件。或者,您可以使用'wscript.arguments(0)'和'(1)'在命令行上传递源和目标。 – rojo 2013-03-01 13:03:50
我还应该提到,在我的情况下,该文件复制得非常快,以至于我从来没有见过文件复制进度条。您应该使用比我更大的测试文件,或者将源和目标设置为不同的驱动器(例如,从网络驱动器复制或复制到USB闪存驱动器)。 – rojo 2013-03-01 13:07:04