0

会社の OS のベンチマークを実行しようとしています。手順の 1 つは、ユーザーがエクスプローラーで単に ctrl-c/ctrl-v を使用して何かをどこかにコピーするのにかかる時間を計算することです。そのため、そのアクションをバッチでスクリプト化して数回実行する方法を知りたいので、実行時間を取得できます。具体的には、コピープロセスのポップアップを表示する方法です。「rundll32 shell32.dll」が何らかの形で関与していると思いますが、方法がわかりません。

ありがとう

4

2 に答える 2

0

あなたはどちらかかもしれません

于 2013-02-27T19:06:45.590 に答える
0

あなたはvbscriptでそれを行うことができます。Folder.CopyHere メソッドページのスクリプト例を参照してください。興味深いことに、このFolder.CopyHere方法はファイルを zip フォルダーに入れる場合にも機能します。を見てください(を使用する方法の別の実世界の例を見る以外の理由がない場合CopyHere)。scripting.filesystemobjectcopy 関数とは異なり、shell.applicationcopyhere 関数は Windows UI API を使用し、存在する場合は置換を求め、ユーザーがドラッグ アンド ドロップしたかのようにファイル コピー ダイアログを表示します。

次に示すのは、100 回までコピー".\Ubi Caritas.mp3"し、操作にかかった時間をミリ秒単位で (4 桁の精度で) 表示する、 benchmark.vbs の例です。%temp%

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.
于 2013-02-27T19:16:10.077 に答える