2013-08-13 36 views
7

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

2

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 
4

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>&nbsp;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 
... 
5

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:

console window progress bar

Đầ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