我可以将参数传递给VBScript(使用cscript启动的vbs文件)吗?

Pet*_*ter 78 parameters vbscript arguments wsh execution

我将此脚本保存在"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
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,我想传递"workFolder"变量的值.

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

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

Dir*_*mar 130

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

调用脚本:

cscript.exe test.vbs "C:\temp\"
Run Code Online (Sandbox Code Playgroud)

在你的脚本里面:

Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)
Run Code Online (Sandbox Code Playgroud)

不要忘记检查是否确实有一个参数传递给您的脚本.你可以通过检查Count财产来做到这一点:

if WScript.Arguments.Count = 0 then
    WScript.Echo "Missing parameters"
end if
Run Code Online (Sandbox Code Playgroud)

如果在关闭文件后脚本结束,则无需将变量设置为Nothing.当cscript.exe进程终止时,将自动清理资源.Nothing通常只有在执行脚本期间明确要释放资源时才需要设置变量.在这种情况下,您将设置包含对COM对象的引用的变量Nothing,这将在脚本终止之前释放COM对象.这只是您的奖金问题的简短答案,您将在这些相关问题中找到更多信息:

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

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


Ole*_*leg 18

在VBS内部,您可以访问参数

Wscript.Arguments(0)
Wscript.Arguments(1)
Run Code Online (Sandbox Code Playgroud)

等等.参数个数:

Wscript.Arguments.Count
Run Code Online (Sandbox Code Playgroud)


unr*_*rip 5

通过命令行传递的每个参数都可以通过以下方式访问:Wscript.Arguments.Item(0)其中零是参数号:ie,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
Run Code Online (Sandbox Code Playgroud)

使用wscript.arguments.count,如果有人没有输入正确的值,你可以使用错误陷阱等.

MS Technet示例


小智 5

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

Set namedArguments = WScript.Arguments.Named
Run Code Online (Sandbox Code Playgroud)

这是一个小辅助函数:

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
Run Code Online (Sandbox Code Playgroud)

示例 VBS:

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

用法示例:

test.vbs /testArg:123
Run Code Online (Sandbox Code Playgroud)