2010-05-10 4 views
67

मेरे पास यह स्क्रिप्ट "test.vbs" में सहेजी गई है:क्या मैं एक वीबीस्क्रिप्ट (vbs फ़ाइल cscript के साथ लॉन्च) के लिए एक तर्क पारित कर सकता हूं?

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set File = FSO.OpenTextFile(workFolder &"\test.txt", 2, True) 
File.Write "testing" 
File.Close 
Set File = Nothing 
Set FSO = Nothing 
Set workFolder = Nothing

जब मैं स्क्रिप्ट चलाता हूं तो मैं "वर्कफ़ोल्डर" चर के मान को पास करना चाहता हूं।

मैं यह कैसे कर सकता हूं? क्या इसे मै कर सकता हूँ? कुछ "cscript test.vbs workFolder: 'C: \ temp \'" शायद कुछ?

बोनस प्रश्न: क्या यह निर्धारित कार्य को "सेट वर्कफ़ोल्डर = कुछ भी नहीं" के साथ सुरक्षित करने के लिए सक्षम है या क्या VBSCript स्वचालित रूप से समाप्त होने पर करता है? हो सकता है कि "फ़ाइल सेट करें = कुछ भी नहीं" और "सेट एफएसओ = कुछ भी नहीं" भी असफल है? यदि आप इन दोनों सवालों के जवाब जानते हैं तो कृपया मुझे बताएं।

उत्तर

112

आप अपनी स्क्रिप्ट में दिए गए तर्कों तक पहुंचने के लिए WScript.Arguments का उपयोग कर सकते हैं।

स्क्रिप्ट कॉलिंग:

cscript.exe test.vbs "C:\temp\" 

अपनी स्क्रिप्ट के अंदर:

Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True) 

भूल जाते हैं वहाँ वास्तव में एक तर्क अपनी स्क्रिप्ट के लिए पारित किया गया है की जाँच करने के मत करो। आप Count संपत्ति की जाँच करके ऐसा कर सकते हैं: अपनी स्क्रिप्ट खत्म हो गया है

if WScript.Arguments.Count = 0 then 
    WScript.Echo "Missing parameters" 
end if 

यदि आप फ़ाइल बंद करने के बाद तो Nothing को चर सेट करने के लिए कोई जरूरत नहीं है। Cscript.exe प्रक्रिया समाप्त होने पर संसाधन स्वचालित रूप से साफ़ हो जाएंगे। एक चर को Nothing पर सेट करना आमतौर पर केवल तभी आवश्यक होता है जब आप स्पष्ट रूप से अपनी स्क्रिप्ट के निष्पादन के दौरान संसाधनों को मुक्त करना चाहते हैं। उस स्थिति में, आप चर सेट करेंगे जिसमें COM ऑब्जेक्ट का संदर्भ Nothing पर होगा, जो आपकी स्क्रिप्ट समाप्त होने से पहले COM ऑब्जेक्ट को रिलीज़ करेगा।

Is there a need to set Objects to Nothing inside VBA Functions

When must I set a variable to “Nothing” in VB6?

+0

बिंगो, यही वह है! बहुत स्पष्ट, बहुत बहुत धन्यवाद। (यदि कोई भी इन टिप्पणियों में से किसी एक में इसका जवाब देना चाहता है तो बोनस प्रश्न अभी भी खुला है।) – Peter

+0

@ पीटर: मैंने आपके बोनस प्रश्न का संक्षिप्त उत्तर जोड़ा। –

5

कमांड लाइन के माध्यम से पारित कर दिया प्रत्येक तर्क के साथ पहुँचा जा सकता है: यह सिर्फ अपने बोनस प्रश्न के संक्षिप्त उत्तर है, तो आप इन से संबंधित प्रश्नों में अधिक जानकारी मिलेगी है: Wscript.Arguments.Item (0) जहां शून्य तर्क संख्या है: यानी, 0, 1, 2, 3 आदि

तो आपके कोड में आप हो सकते हैं:

strFolder = Wscript.Arguments.Item(0) 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set File = FSO.OpenTextFile(strFolder, 2, True) 
File.Write "testing" 
File.Close 
Set File = Nothing 
Set FSO = Nothing 
Set workFolder = Nothing 

wscript.arguments.count उपयोग करके, आप जाल मामले में कोई उचित मूल्य में प्रवेश नहीं करता, आदि

MS Technet examples

+0

आह, धन्यवाद आदमी। दिलचस्प है कि आपको विस्क्रिप्ट का उदाहरण नहीं बनाना है। (यदि कोई भी इन टिप्पणियों में से किसी एक में इसका जवाब देना चाहता है तो बोनस प्रश्न अभी भी खुला है।) – Peter

+0

1) 'वर्कफ़ोल्डर' को उपर्युक्त उत्तर या मूल प्रश्न में किसी ऑब्जेक्ट के रूप में परिभाषित नहीं किया गया है, इसलिए 'कार्य सेट करेंल्डर = कुछ भी नहीं 'एक त्रुटि उठाना चाहिए। 2) चूंकि तर्क को एक से अधिक बार पुन: उपयोग करने की आवश्यकता के रूप में सुझाव नहीं दिया गया है, शायद इसे 'strFolder' चर को असाइन करना छोड़ दें। 3) 'Wscript.Arguments.Item (0) ' – user66001

+0

में' 0' के बजाय 'x' का उपयोग करने का सुझाव देगा। असल में यह विकल्प तब तक नहीं बढ़ेगा जब तक कि विकल्प स्पष्ट नहीं होता है, और उस स्थिति में कुछ भी काम नहीं करेगा क्योंकि कुछ भी परिभाषित नहीं किया गया है । यह वैरिएबल के बारे में सच है, हालांकि इसकी आवश्यकता नहीं है, फिर न तो एफएसओ या फाइल ऑब्जेक्ट्स और एक सरल इस्तेमाल किया जा सकता है। विभिन्न दृष्टिकोणों का एक टन संभव ... :) – unrealtrip

16

त्रुटि कर सकते हैं VBS के अंदर आप

साथ मानकों का उपयोग कर सकते
Wscript.Arguments(0) 
Wscript.Arguments(1) 

और इसी तरह। पैरामीटर की संख्या:

Wscript.Arguments.Count 
+0

धन्यवाद! (यदि कोई भी इन टिप्पणियों में से किसी एक में इसका जवाब देना चाहता है तो बोनस प्रश्न अभी भी खुला है।) – Peter

2

वास्तव में बोनस प्रश्न का उत्तर "नहीं" है। आपको साफ करने की आवश्यकता नहीं है। लेकिन सामान्य प्रोग्रामिंग अभ्यास हमेशा अपनी चीजों को साफ करना है, जैसे कि रात के खाने के बाद, अपनी प्लेट को साफ करें।

2

नए प्रोग्रामर को पढ़ाने में, "क्या मुझे साफ करना चाहिए?" का सही उत्तर हमेशा हाँ है यदि कोई सफाई करने की आदत में है, तो कोई साफ हो जाएगा। फिर जब यह वास्तव में आवश्यक है (न कि कोई ढेर का गड़बड़ कर देता है), सफाई की आदत है और ऐसा होगा।

बेहतर सवाल यह है कि "क्या मैं इस स्क्रिप्ट के अंत में साफ होने पर समस्या उत्पन्न करता हूं?" या इससे भी बेहतर ... "मान लीजिए कि मैं एक लंबी लिपि (या जीसी उपलब्ध नहीं है) के साथ जारी रहा हूं, क्या यह इन वस्तुओं को साफ करने का सही तरीका है?"

मेरे दो सेंट। पॉल

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

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