2012-11-02 6 views
9

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

मैं बजाय सीएमडी \ बैट फ़ाइलों के VBS फ़ाइलों का उपयोग कर और कैसे कंसोल के लिए एक गूंज के बराबर करने के लिए यह पता लगाने की कोशिश कर रहा हूँ शुरू करना चाहते हैं।

जब मैं या तो WScript.Echo आदेश का उपयोग करें या स्टैंडर्ड आउट करने के लिए लिखने की कोशिश, संदेशों दोनों के लिए संवाद बॉक्स में प्रदर्शित किए जाते हैं और वे की आवश्यकता होती है ठीक बटन को जारी रखने के लिए धकेल दिया। आश्चर्य की बात नहीं है, जब मैं एक शेड्यूलर के बावजूद अनुपस्थित हूं, तो नौकरी इन आदेशों में से एक को हिट करती है और बस लटकती है क्योंकि संदेशबॉक्स को ठीक करने के लिए कोई भी नहीं है।

SET FS = CreateObject("Scripting.FileSystemObject") 
SET StdOut = FS.GetStandardStream(1) 
StdOut.Write("Test 1") 

WScript.echo("Test 2") 

मुझे पता है मैं पटकथा वस्तु का उपयोग कर एक लॉग फ़ाइल को संदेश लिख सकते हैं, लेकिन अगर कोई अमान्य पथ या क्योंकि अपर्याप्त अनुमतियों के प्रदान की जाती है यह विफल हो सकता है। इसके अलावा, शेड्यूलर के भीतर फीडबैक लिखने में सक्षम होना बेहद सुविधाजनक है।

मैं वीबीस्क्रिप्ट का उपयोग कर कंसोल पर कैसे लिखूं? मैंने यहां अन्य पोस्ट देखी हैं जो बताती हैं कि उपर्युक्त विधियों ने ऊपर वर्णित कारण के लिए काम नहीं किया था, ऐसा करने का तरीका था।

+0

मैं दृढ़ता से PowerShell के बजाय VBScript का उपयोग करने जा सिफारिश करेंगे। –

उत्तर

10

wscript.echo सही कमांड है - लेकिन उत्पादन के लिए बातचीत करने के बजाय सांत्वना देने आप के बजाय cscript WScript के साथ स्क्रिप्ट चलाने के लिए की जरूरत है।

तुम इतनी तरह कमांड लाइन से स्क्रिप्ट चलाने से

  • इस को हल कर सकते हैं:

    cscript myscript.vbs 
    
  • डिफ़ॉल्ट फ़ाइल संघ बदल रहा है (या उन लिपियों के लिए एक नई फाइल एक्सटेंशन और संघ बनाने आप सीएसक्रिप्ट के साथ भागना चाहते हैं)।

  • परिवर्तन स्क्रिप्ट मेजबान विकल्प (के रूप में प्रति http://support.microsoft.com/kb/245254 यानी) के माध्यम से इंजन

    cscript //h:cscript //s 
    
  • या आप अपनी स्क्रिप्ट के शुरू करने के कुछ पंक्तियां जोड़ सकते हैं WScript से "इंजन" स्विच करने के लिए यह मजबूर करने के लिए cSCRIPT के लिए - देखने http://www.robvanderwoude.com/vbstech_engine_force.php (नीचे की नकल की):

    RunMeAsCScript 
    
    'do whatever you want; anything after the above line you can gaurentee you'll be in cscript 
    
    Sub RunMeAsCScript() 
         Dim strArgs, strCmd, strEngine, i, objDebug, wshShell 
         Set wshShell = CreateObject("WScript.Shell") 
         strEngine = UCase(Right(WScript.FullName, 12)) 
         If strEngine <> "\CSCRIPT.EXE" Then 
           ' Recreate the list of command line arguments 
           strArgs = "" 
           If WScript.Arguments.Count > 0 Then 
             For i = 0 To WScript.Arguments.Count 
               strArgs = strArgs & " " & QuoteIt(WScript.Arguments(i)) 
             Next 
           End If 
           ' Create the complete command line to rerun this script in CSCRIPT 
           strCmd = "CSCRIPT.EXE //NoLogo """ & WScript.ScriptFullName & """" & strArgs 
           ' Rerun the script in CSCRIPT 
           Set objDebug = wshShell.Exec(strCmd) 
           ' Wait until the script exits 
           Do While objDebug.Status = 0 
             WScript.Sleep 100 
           Loop 
           ' Exit with CSCRIPT's return code 
           WScript.Quit objDebug.ExitCode 
         End If 
    End Sub 
    
    'per Tomasz Gandor's comment, this will ensure parameters in quotes are covered: 
    function QuoteIt(strTemp) 
         if instr(strTemp," ") then 
           strTemp = """" & replace(strTemp,"""","""""") & """" 
         end if 
         QuoteIt = strTemp 
    end function 
    
+2

मैं जेएस का उपयोग कर, एक ही समस्या के साथ यहाँ ठोकर खाई। Wscript/cscript के लिए जांच बहुत अधिक सुरुचिपूर्ण है: 'अगर (! WScript.FullName.match ("cscript.exe")) {...} '। (या शायद regexp में '$ 'जोड़ें, बस मामले में)। मैं स्क्रिप्ट को दोबारा नहीं कर रहा हूं - इस्तेमाल किए गए इंजन के आधार पर बस वर्बोजिटी बदल रहा हूं। बीटीडब्ल्यू, ऊपर दिए गए उदाहरण में: तर्क से बचने/उद्धरण के बारे में क्या? क्या यह रिक्त स्थान वाले तर्कों के साथ काम करेगा? अहा! –

+0

अच्छा बिंदु - मैंने संदर्भित साइट से कोड कॉपी और पेस्ट किया होगा - अब उस परिदृश्य के लिए एक त्वरित फिक्स खटखटाया है (यानी उद्धरण यह फ़ंक्शन जोड़ना)। जेएस मोर्चे पर भी अच्छी टिप। धन्यवाद @ टोमाज़ गैन्डर। QuoteIt फ़ंक्शन के डिजाइन के लिए – JohnLBevan

+1

@JohnLBevan -0.499 (पारित पैरामीटर strTemp के बजाय वैश्विक WScript.Arguments (i) का उपयोग करके)। –

संबंधित मुद्दे