我正在尝试对我们公司的操作系统进行基准测试,其中一个步骤是计算用户在资源管理器下仅使用 ctrl-c/ctrl-v 将某些内容复制到某处所需的时间。因此,我想知道如何将该操作批量编写脚本以多次运行,以便获得时间执行,特别是如何使复制过程弹出窗口出现。我认为“rundll32 shell32.dll”以某种方式涉及,但我不知道如何。
谢谢
我正在尝试对我们公司的操作系统进行基准测试,其中一个步骤是计算用户在资源管理器下仅使用 ctrl-c/ctrl-v 将某些内容复制到某处所需的时间。因此,我想知道如何将该操作批量编写脚本以多次运行,以便获得时间执行,特别是如何使复制过程弹出窗口出现。我认为“rundll32 shell32.dll”以某种方式涉及,但我不知道如何。
谢谢
你可以用 vbscript 做到这一点。请参阅Folder.CopyHere 方法页面上的脚本示例。有趣的是,该Folder.CopyHere
方法还可以将文件放入 zip 文件夹。看一个例子(如果没有其他原因,只是想看看另一个真实世界的例子CopyHere
)。与scripting.filesystemobject
复制函数不同,shell.application
copyhere 函数使用 Windows UI API,如果存在则提示替换,并显示文件复制对话框,就像用户拖放一样。
".\Ubi Caritas.mp3"
这是一个复制到100 次的示例 benchmark.vbs %temp%
,然后显示操作所用的时间(以毫秒为单位)(具有 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.
你可以
直接从您的应用程序中使用Windows 用户界面自动化API ( http://en.wikipedia.org/wiki/Microsoft_UI_Automation );
或者您可以创建一个AutoIt脚本 ( http://www.autoitscript.com/site/autoit/ )