我可以将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),这是清理这些对象的正确方法吗?
我的两分钱 保罗