私は VBScript の初心者で、大きな入力ファイルを解析するスクリプトを作成しており、処理を完了するのに数分かかる可能性があります。この長い処理時間の間、スクリプトがエラーなしで実行されていることをユーザーに警告する方法が必要です。私が最初に考えたのは、処理される 1000 番目のレコードごとに msgbox を提示することでした (たとえば、「スクリプトはこれまでに 1000 レコードを正常に処理しました」)。私の最終目標を達成するためのより良い方法があるかどうかを判断します)。何か案は?
質問する
31712 次
7 に答える
9
コンソール ウィンドウで (cscript.exe を介して) スクリプトを実行している場合は、次のようにウィンドウ/出力に偽の進行状況バーを直接表示できます。
Function printi(txt)
WScript.StdOut.Write txt
End Function
Function printr(txt)
back(Len(txt))
printi txt
End Function
Function back(n)
Dim i
For i = 1 To n
printi chr(08)
Next
End Function
Function percent(x, y, d)
percent = FormatNumber((x / y) * 100, d) & "%"
End Function
Function progress(x, y)
Dim intLen, strPer, intPer, intProg, intCont
intLen = 22
strPer = percent(x, y, 1)
intPer = FormatNumber(Replace(strPer, "%", ""), 0)
intProg = intLen * (intPer / 100)
intCont = intLen - intProg
printr String(intProg, ChrW(9608)) & String(intCont, ChrW(9618)) & " " & strPer
End Function
Function ForceConsole()
Set oWSH = CreateObject("WScript.Shell")
vbsInterpreter = "cscript.exe"
If InStr(LCase(WScript.FullName), vbsInterpreter) = 0 Then
oWSH.Run vbsInterpreter & " //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)
WScript.Quit
End If
End Function
次に、スクリプトの先頭で次の例を使用します。
ForceConsole()
For i = 1 To 100
progress(i, 100)
Next
于 2015-11-11T13:28:18.237 に答える
4
ユーザーを困らせたい場合を除き、ポップアップ メッセージを使用しないでください。このページのような進行状況インジケーターを表示するHTAでコードをラップします。
<html>
<head>
<title>Sample</title>
<hta:application
applicationname="Sample"
scroll="no"
singleinstance="yes"
windowstate="normal"
>
<script language="vbscript">
Sub Window_onLoad
'your code here
End Sub
</script>
<style type="text/css">
* {
font-size: 1px;
margin: 1px;
}
div {
position: absolute;
left: 40%;
top: 50%;
}
marquee {
border: 1px solid;
height: 15px;
width: 200px;
}
marquee span {
height: 11px;
width: 8px;
background: Highlight;
float: left;
}
.handle-0 { filter: alpha(opacity=20); -moz-opacity: 0.20; }
.handle-1 { filter: alpha(opacity=40); -moz-opacity: 0.40; }
.handle-2 { filter: alpha(opacity=60); -moz-opacity: 0.6; }
.handle-3 { filter: alpha(opacity=80); -moz-opacity: 0.8; }
.handle-4 { filter: alpha(opacity=100); -moz-opacity: 1; }
</style>
</head>
<body>
<div>
<marquee direction="right" scrollamount="8" scrolldelay="100">
<span class="handle-0"></span>
<span class="handle-1"></span>
<span class="handle-2"></span>
<span class="handle-3"></span>
<span class="handle-4"></span>
</marquee>
</div>
</body>
</html>
より動的な情報を提供したい場合は、たとえば、次のような段落を本文に追加できます。
</div>
<p id="sline" style="visibility:hidden;">Processed
<span id="rcount"></span> Records.</p>
</body>
</html>
1000 レコードごとに更新します。
...
If numRows Mod 1000 = 0 Then
If sline.style.visibility = "hidden" Then sline.style.visibility = "visible"
rcount.innerText = numRows
End If
...
于 2013-08-13T19:35:28.057 に答える
4
そのような場合、WshShell.Popupメソッドを使用して、現在の進行状況に関する情報を提供したいと考えています。
ここに例があります:
Dim WshShell, i
Set WshShell = CreateObject("WScript.Shell")
For i = 1 To 500
'Do Something
If i Mod 100 = 0 Then 'inform for every 100 process
WshShell.Popup i & " items processed", 1, "Progress" ' show message box for a second and close
End If
Next
于 2013-08-13T18:13:10.133 に答える