我可以将parameter passing给VBScript(用cscript启动的vbs文件)吗?

我有这个脚本保存在“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 

当我运行脚本时,我想传递“workFolder”variables的值。

我怎样才能做到这一点? 我可以做吗? 像“cscript test.vbs workFolder:'C:\ temp \'”也许?

奖金问题:是否需要用“Set workFolder = Nothing”清理传入的variables,或者VBSCript在终止时自动执行? 也许“Set File = Nothing”和“Set FSO = Nothing”也是不必要的? 如果你知道这两个问题的答案,请让我知道。

您可以使用WScript.Arguments来访问传递给您的脚本的参数。

调用脚本:

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

在脚本里面:

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

不要忘记检查是否有实际的parameter passing给你的脚本。 你可以通过检查Count属性来做到这一点:

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

如果在closures文件后脚本结束,则不需要将variables设置为Nothing 。 当cscript.exe进程终止时,资源将被自动清理。 只有在脚本执行过程中明确要释放资源时,才需要将variables设置为Nothing 。 在这种情况下,您可以将包含对COM对象的引用的variables设置为Nothing ,在脚本终止之前释放COM对象。 这只是您的奖金问题的简短答案,您将在以下相关问题中find更多信息:

是否需要在VBA函数中将对象设置为Nothing

什么时候我必须在VB6中设置一个variables为“Nothing”?

在VBS里面你可以用参数来访问

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

等等。 参数个数:

 Wscript.Arguments.Count 

通过命令行传递的每个参数可以通过以下方式访问:Wscript.Arguments.Item(0)其中,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,如果有人没有input正确的值,就可能出错。

MS Technet的例子

其实奖金问题的答案是“否”。 你不需要清理。 但是一般的编程习惯是总要清理你的东西,比如在你的晚餐后,请清理你的盘子。

在教授新程序员时,“我应该清理干净”的正确答案是什么? 总是有的。 如果一个人有清理的习惯,那么他就会清理干净。 那么当它实际上是必需的(恐怕一堆乱七八糟的东西等),清理就是习惯,就会发生。

更好的问题是“如果我在这个脚本的末尾清理,是否会引起问题?” 甚至更好……“假设我正在继续使用一个很长的脚本(或没有可用的GC),这是清理这些对象的正确方法吗?

我的两分钱 保罗