Tôi là người mới sử dụng VBScript, viết một tập lệnh sẽ phân tích (các) tệp đầu vào lớn và có thể mất vài phút để xử lý xong. Tôi cần một cách để cảnh báo người dùng rằng tập lệnh đang chạy mà không có lỗi trong thời gian xử lý dài này. Suy nghĩ đầu tiên của tôi là trình bày một msgbox cho mỗi 1000 bản ghi được xử lý (ví dụ: "script đã xử lý thành công 1000 bản ghi cho đến thời điểm này.") Chưa hoàn toàn bẻ khóa cách thích hợp để mã một bộ gia tăng sẽ điều kiện gửi một msgbox mỗi bản ghi thứ N (hoặc xác định nếu có một cách tốt hơn để đạt được mục tiêu cuối cùng của tôi). Bất kỳ ý tưởng?Thông báo tiến trình tập lệnh VBScript
Trả lời
Trong những trường hợp như vậy, tôi muốn sử dụng phương pháp WshShell.Popup để cung cấp thông tin về tiến trình hiện tại.
đây một ví dụ:
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
Không sử dụng popup tin nhắn cho điều này trừ khi bạn muốn làm phiền các heck ra khỏi người dùng của bạn. Quấn mã của bạn trong một HTA hiển thị chỉ báo tiến trình như một trong this page, ví dụ:
<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>
Nếu bạn muốn cung cấp một số thông tin năng động hơn, bạn có thể ví dụ thêm một đoạn như thế này để cơ thể:
</div>
<p id="sline" style="visibility:hidden;">Processed
<span id="rcount"></span> Records.</p>
</body>
</html>
và cập nhật nó mỗi 1.000 hồ sơ:
...
If numRows Mod 1000 = 0 Then
If sline.style.visibility = "hidden" Then sline.style.visibility = "visible"
rcount.innerText = numRows
End If
...
Nếu bạn đang chạy script của bạn trong một cửa sổ giao diện điều khiển (thông qua cscript.exe) sau đó bạn có thể hiển thị một thanh tiến trình giả trực tiếp trong cửa sổ/đầu ra như thế này:
Đầu tiên tuyên bố các chức năng sau trong tập tin VBS của bạn:
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
Sau đó ở phía trên cùng của kịch bản của bạn sử dụng ví dụ sau:
ForceConsole()
For i = 1 To 100
progress(i, 100)
Next