2013-02-15 31 views
17

मैं लाइनों 7 में 800A0414 त्रुटि और 12 इस स्क्रिप्ट का मिल रहा है बुला कोष्ठक का उपयोग नहीं कर सकता:जब एक उप त्रुटि 800A0414 VBS

Module Module1 

    Dim p 

    Sub Main() 
     CreateObject("Wscript.Shell").Run("program.bat", 0, True) 

     p = Process.GetProcessesByName("program") 
     If p.Count > 0 Then 
      WScript.Sleep(300000) 
     Else 
      CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True) 
     End If 

    End Sub 

    Private Function WScript() As Object 
     Throw New NotImplementedException 
    End Function 

End Module 

मैं एक बैच स्क्रिप्ट चलाने के लिए कोशिश कर रहा हूँ, कि एक प्रक्रिया है, तो शुरू होता है प्रक्रिया समाप्त होने तक प्रतीक्षा करें, फिर एक और बैच स्क्रिप्ट चलाएं। मैं भी नहीं चाहता कि कोई कमांड बॉक्स दिखाया जा रहा हो। यदि उनका एक आसान तरीका है तो कृपया मुझे बताएं।

आपकी मदद के लिए धन्यवाद

उत्तर

42

जब आप कोष्ठक में एक प्रक्रिया के तर्क सूची संलग्न है, तो आप Call कीवर्ड का उपयोग करना चाहिए:

Call CreateObject("WScript.Shell").Run("program.bat", 0, True) 

आप Call कीवर्ड को छोड़ देते हैं, तो आप भी कोष्ठकों ड्रॉप करना होगा:

CreateObject("WScript.Shell").Run "program.bat", 0, True 
+1

ऐसा अपवाद प्रतीत होता है कि यदि आप केवल पहले पैरामीटर का उपयोग करते हैं तो यह आपको ब्रांड्स का उपयोग करने देगा। अर्थात। 'CreateObject (" Wscript.Shell ")। भागो (" कार्यक्रम।बल्ले ") 'शिकायत के बिना काम करता है – BeowulfNode42

+0

@ बियोवुल्फ़ोड 42:' रून ("प्रोग्राम.बैट")' वैध वाक्यविन्यास है - इसे 'कॉल ... रन (("प्रोग्राम.बैट")) के रूप में व्याख्या किया गया है।' विशिष्ट तर्क इस तर्क को 'ByRef' के बजाय 'ByVal' पारित करने के लिए मजबूर करता है। दूसरे शब्दों में, यदि उप-उपरोक्त 'ByVal' तर्कों की अपेक्षा कर रहा है, तो' MySub (param) 'काम करेगा, लेकिन अगर यह' ByRef' 'की अपेक्षा कर रहा है तो काम नहीं करेगा विवरण। विवरण के लिए, देखें [वीबीस्क्रिप्ट में ByRef और ByVal] (http://stackoverflow.com/q/1537819/113116) – Helen

-1

मुझे लगता है कि यह एक वीबीएनईटी है, वीबीस्क्रिप्ट कोड नहीं। आपके पास VB.NET (और अन्य विधियों) में Shell function है।

वैसे भी, Run कार्यक्रम द्वारा लौटाए गए किसी भी त्रुटि कोड देता है, और अगर आप दुकान है कि एक चर में परिणाम है, तो आप कोष्ठकों इस मामले में उपयोग कर सकते हैं।

Dim lResult As Long 
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True) 

बाकी का उत्तर @ हेलेन ने दिया था।

7

पूरा करने के लिए क्या कहा गया है से पहले:

जब Call कीवर्ड प्रयोग किया जाता है एक प्रक्रिया है (यानी उप या समारोह) कॉल करने के लिए तर्क कोष्ठक में, को छोड़कर संलग्न किया जाना चाहिए जब प्रक्रिया नहीं है तर्क इस मामले में कोष्ठक वैकल्पिक हैं। उदाहरण के लिए सभी बयान:

Call test() 
Call test 
Call test(1,2) 

मान्य हैं, लेकिन यह एक नहीं:

Call test 1 

जब कॉल कीवर्ड का उपयोग किए बिना एक प्रक्रिया बुला, कोष्ठक केवल इस्तेमाल किया जा सकता है जब या तो प्रक्रिया में शून्य या एक तर्क है या प्रक्रिया में वापसी मूल्य है (यानी फ़ंक्शन) और इसका मान उसी कथन में उपयोग किया जाता है। उदाहरण के लिए सभी कथन:

test() 
test(1) 
test(1,2) 
a = test 
a = test(1,2) 
a = test(test(1,2),2) 

मान्य हैं, तीसरे एक को छोड़कर एक से अधिक तर्क हैं। यदि यह स्पष्ट नहीं है, तो अंतिम विवरण में "परीक्षण" का आंतरिक कॉल मान्य है क्योंकि इसका वापसी मान किसी अन्य कॉल के तर्क के रूप में उपयोग किया जाता है।

ध्यान दें कि जब भी कोष्ठकों इस पाठ में प्रयोग किया जाता है, यह भी संभव अल्पविराम -separated मूल्यों मतलब के लिए है।

+0

नोट: 'परीक्षण (1)' 'test 1' जैसा नहीं है। यह बराबर है 'कॉल टेस्ट ((1))', जहां तर्क के चारों ओर कोष्ठक (तर्क सूची नहीं) तर्क को 'ByRef' के बजाय' ByVal' पारित करने के लिए मजबूर करता है। देखें [VBScript में ByRal और ByVal] (http:/विवरण के लिए /stackoverflow.com/q/1537819/113116)। – Helen

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

  • कोई संबंधित समस्या नहीं^_^