আমি কি কোনও ভিবিএস স্ক্রিপ্টের (সিএসক্রিপ্টের সাথে লঞ্চ করা vBS ফাইল) একটি যুক্তিটি পাস করতে পারি?


85

আমি এই স্ক্রিপ্টটি "test.vbs" এ সংরক্ষণ করেছি:

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 \'" এর মতো কিছু সম্ভবত?

বোনাস প্রশ্ন: "সেট ওয়ার্কফোল্ডার = কিছুই না" দিয়ে উত্তীর্ণ ভেরিয়েবলটি পরিষ্কার করা কি প্রয়োজনীয় বা ভিবিএসক্রিপ এটি বন্ধ হয়ে গেলে স্বয়ংক্রিয়ভাবে তা করে? সম্ভবত "সেট ফাইল = কিছুই না" এবং "সেট এফএসও = কিছুই না" এছাড়াও অনিবার্য? আপনি যদি এই দুটি প্রশ্নের উত্তর জানেন তবে দয়া করে আমাকে জানান।

উত্তর:


138

আপনি 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সাধারণত যদি আপনার স্ক্রিপ্টটি কার্যকর করার সময় আপনি স্পষ্টভাবে সংস্থানগুলি মুক্ত করতে চান তবে সাধারণত একটি ভেরিয়েবল সেট করা প্রয়োজনীয়। Nothingসেক্ষেত্রে আপনি এমন ভেরিয়েবল সেট করবেন যেগুলিতে কোনও COM অবজেক্টের রেফারেন্স রয়েছে , যা আপনার স্ক্রিপ্ট শেষ হওয়ার আগে COM অবজেক্টটি প্রকাশ করবে। এটি আপনার বোনাস প্রশ্নের একটি সংক্ষিপ্ত উত্তর, আপনি এই সম্পর্কিত প্রশ্নগুলিতে আরও তথ্য পাবেন:

ভিবিএ ফাংশনগুলির মধ্যে কোনও কিছুইতে অবজেক্টস সেট করার দরকার নেই?

আমি কখন VB6 এ "কিছুই না" একটি পরিবর্তনশীল সেট করতে হবে?


বিঙ্গো, এটাই! খুব পরিষ্কার, অনেক অনেক ধন্যবাদ। (এই মন্তব্যগুলির মধ্যে যে কেউ এর উত্তর দিতে চাইলে বোনাসের প্রশ্ন এখনও উন্মুক্ত))
পিটার

@ পিটার: আমি আপনার বোনাস প্রশ্নের একটি সংক্ষিপ্ত উত্তর যুক্ত করেছি।
ডার্ক ভোলমার

21

ভিবিএসের অভ্যন্তরে আপনি এর সাথে প্যারামিটারগুলি অ্যাক্সেস করতে পারবেন

Wscript.Arguments(0)
Wscript.Arguments(1)

ইত্যাদি। প্যারামিটারের সংখ্যা:

Wscript.Arguments.Count

ধন্যবাদ! (এই মন্তব্যগুলির মধ্যে যে কেউ এর উত্তর দিতে চাইলে বোনাসের প্রশ্ন এখনও উন্মুক্ত))
পিটার

6

কমান্ড লাইনের মাধ্যমে পাস হওয়া প্রতিটি আর্গুমেন্টের সাথে প্রবেশ করা যাবে: ডাব্লুস্ক্রিপ্ট.আর্গুমেন্টস.আইটিম (0) যেখানে শূন্যটি আর্গুমেন্ট সংখ্যা: যেমন, 0, 1, 2, 3 ইত্যাদি the

সুতরাং আপনার কোড আপনি থাকতে পারে:

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 ব্যবহার করে, কেউ যদি সঠিক মান ইত্যাদি প্রবেশ না করে তবে আপনি ফাঁদে ত্রুটি করতে পারেন etc.

এমএস টেকনেটের উদাহরণ


আহা, ধন্যবাদ মানুষ। আকর্ষণীয় যে আপনি স্ক্রিপ্ট একটি উদাহরণ তৈরি করতে হবে না। (এই মন্তব্যগুলির মধ্যে যে কেউ এর উত্তর দিতে চাইলে বোনাসের প্রশ্ন এখনও উন্মুক্ত))
পিটার

1) workFolderউপরের উত্তর, বা মূল প্রশ্নের মধ্যে কোনও একটি বিষয় হিসাবে সংজ্ঞায়িত করা হয়নি, সুতরাং Set workFolder = Nothingএকটি ত্রুটি উত্থাপন করা উচিত। 2) যেহেতু আর্গুমেন্টটি একাধিকবার পুনঃব্যবহারের প্রয়োজন হিসাবে প্রস্তাবিত নয়, সম্ভবত এটি strFolderভেরিয়েবলের জন্য বরাদ্দ করা এড়িয়ে যান । 3) ব্যবহার করে সুপারিশ করবে xপরিবর্তে 0মধ্যেWscript.Arguments.Item(0)
user66001

প্রকৃতপক্ষে বিকল্পটি সেট না করা পর্যন্ত এটি ত্রুটি বাড়িয়ে তুলবে না এবং সেই ক্ষেত্রে কোনও কিছুই কাজ করবে না কারণ কোনও কিছুই সংজ্ঞায়িত করা হয়নি। পরিবর্তনশীল সম্পর্কে এটি সত্য, তবে এটির প্রয়োজন নেই, তারপরে আবার এফএসও বা ফাইল ফাইল এবং একটি সাধারণ ব্যবহারযোগ্য হতে পারে। এক টন বিভিন্ন পদ্ধতির সম্ভাব্য ... :)
অবাস্তব প্রকাশ

2

আপনি নামযুক্ত যুক্তিগুলিও ব্যবহার করতে পারেন যা alচ্ছিক এবং কোনও ক্রমে দেওয়া যেতে পারে।

Set namedArguments = WScript.Arguments.Named

এখানে একটি সামান্য সহায়ক ফাংশন:

Function GetNamedArgument(ByVal argumentName, ByVal defaultValue)
  If WScript.Arguments.Named.Exists(argumentName) Then
    GetNamedArgument = WScript.Arguments.Named.Item(argumentName) 
  Else  
    GetNamedArgument = defaultValue
  End If
End Function

ভিবিএস উদাহরণ:

'[test.vbs]
testArg = GetNamedArgument("testArg", "-unknown-")
wscript.Echo now &": "& testArg

ব্যবহারের উদাহরণ:

test.vbs /testArg:123

0

আপনার বোনাস প্রশ্নের উত্তর দেওয়ার জন্য, সাধারণ উত্তরটি হ'ল না, আপনাকে সংক্ষেপে "কিছুই না" র মধ্যে ভেরিয়েবল সেট করার দরকার নেই like

আপনি লম্বা স্ক্রিপ্টের মাঝখানে এটি করার কারণটি হ'ল মেমরিটি অপারেটিং সিস্টেমে ফিরিয়ে দেওয়া যা অন্যথায় ভিবি হোল্ড করে। এই দিনগুলিতে যখন 8 গিগাবাইট র‌্যাম টিপিক্যাল এবং 16 জিবি + তুলনামূলকভাবে সাধারণ, এটি কোনও পরিমাপযোগ্য প্রভাব ফেলতে পারে না এমনকি এমন এক বিশাল স্ক্রিপ্টেও যেখানে একক ভেরিয়েবলে বেশ কয়েকটি মেগাবাইট রয়েছে। এই মুহুর্তে এটি এমন একদিনের হোল্ড ওভার যা আপনি সম্ভবত 1MB বা 2MB র্যামে কাজ করছেন।

আপনি সঠিক, আপনার। ভিবিএস স্ক্রিপ্টটি সম্পূর্ণ হওয়ার সাথে সাথে আপনার সমস্ত ভেরিয়েবলগুলি ধ্বংস হয়ে যায় এবং যেকোনোভাবেই মেমরিটি পুনরুদ্ধার করা যায়। ভেরিয়েবলগুলি "কিছুই না" এ সেট করা সহজভাবে সেই প্রক্রিয়াটির গতি বাড়ায় এবং আপনাকে এটি কোনও স্ক্রিপ্টের মাঝখানে করতে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.