2013-08-13 6 views
7

मैं एक वीबीस्क्रिप्ट नौसिखिया हूं, एक स्क्रिप्ट लिख रहा हूं जो बड़ी इनपुट फ़ाइल को पार्स कर देगा और प्रोसेसिंग को पूरा करने में कई मिनट का समय लगेगा। मुझे उपयोगकर्ताओं को चेतावनी देने का एक तरीका चाहिए कि स्क्रिप्ट इस लंबे प्रसंस्करण समय के दौरान त्रुटि के बिना चल रही है। मेरा पहला विचार संसाधित प्रत्येक 1000 वें रिकॉर्ड के लिए एक संदेशबॉक्स प्रस्तुत करना था (उदाहरण के लिए "स्क्रिप्ट ने अब तक 1000 रिकॉर्ड सफलतापूर्वक संसाधित किए हैं।") एक वृद्धिकर्ता को कोड करने के लिए उचित तरीके से क्रैक नहीं किया गया है जो सशर्त रूप से प्रत्येक एनएच रिकॉर्ड (या निर्धारित किया गया है कि मेरे अंतिम लक्ष्य को प्राप्त करने का एक बेहतर तरीका है)। कोई विचार?वीबीस्क्रिप्ट स्क्रिप्ट प्रगति अधिसूचना

उत्तर

2

ऐसे मामलों में मैं वर्तमान प्रगति के बारे में जानकारी प्रदान करने के लिए 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 
4

इस के लिए पॉपअप संदेशों का उपयोग जब तक आप अपने उपयोगकर्ताओं से बाहर बिल्ली परेशान नहीं करना चाहते।

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

आप कुछ और अधिक गतिशील जानकारी प्रदान करना चाहते हैं, तो आप उदाहरण के लिए एक पैरा इस तरह शरीर के लिए जोड़ सकते हैं:: एक HTA कि this page में से एक है, जैसे की तरह प्रगति संकेतक प्रदर्शित में अपने कोड लपेटें

</div> 
<p id="sline" style="visibility:hidden;">Processed 
<span id="rcount"></span>&nbsp;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 
... 
5

आप (cscript.exe के माध्यम से) एक कंसोल विंडो में अपनी स्क्रिप्ट चला रहे हैं तो आप विंडो में सीधे एक छद्म प्रगति बार प्रदर्शित कर सकते हैं/इस तरह उत्पादन: अपनी स्क्रिप्ट के शीर्ष पर

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 

तब:

console window progress bar

सबसे पहले अपने VBS फ़ाइल में निम्न कार्यों की घोषणा निम्नलिखित उदाहरण का उपयोग करें:

ForceConsole() 

For i = 1 To 100 
    progress(i, 100) 
Next 
संबंधित मुद्दे