87

我将此脚本保存在“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”变量的值。

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

奖励问题:是否有必要使用“Set workFolder = Nothing”清理传递的变量,或者 VBSCript 在终止时会自动执行此操作吗?也许“Set File = Nothing”和“Set FSO = Nothing”也是不必要的?如果您知道这两个问题的答案,请告诉我。

4

5 回答 5

142

您可以使用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 对象。这只是对您的奖励问题的简短回答,您将在这些相关问题中找到更多信息:

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

我什么时候必须在 VB6 中将变量设置为“Nothing”?

于 2010-05-10T21:56:07.713 回答
23

在 VBS 内部,您可以使用

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

等等。参数个数:

Wscript.Arguments.Count
于 2010-05-10T21:58:08.013 回答
6

通过命令行传递的每个参数都可以通过以下方式访问: 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 示例

于 2010-05-10T21:56:31.307 回答
4

您还可以使用命名参数,这些参数是可选的,可以按任何顺序给出。

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

示例 VBS:

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

示例用法:

test.vbs /testArg:123
于 2020-02-06T23:01:18.360 回答
0

要回答您的奖励问题,一般答案是否定的,您不需要将变量设置为“无”,就像您的那样,由 Wscript 或 Cscript 调用的简短 .VBS 脚本。

您可能在较长的脚本中间执行此操作的原因是将内存释放回 VB 本来持有的操作系​​统。如今,8GB RAM 是典型的,16GB+ 相对普遍,这不太可能产生任何可衡量的影响,即使是在单个变量中有几兆字节的巨大脚本上也是如此。在这一点上,这有点像您在 1MB 或 2MB RAM 中工作的日子。

你是对的,当你的 .VBS 脚本完成时,你的所有变量都会被破坏,内存也会被回收。将变量设置为“无”只会加速该过程,并允许您在脚本中间执行此操作。

于 2019-11-13T11:00:22.810 回答