测试 VBScript 命名参数是否存在
Test if VBScript named argument exists
我想在验证该参数之前测试是否提供了特定的命名参数,因此我可以为缺失和无效条件提供有意义的错误代码。
我现在有这个
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = WScript.Arguments.Named
If colArgs.Item("Script") Then
If not objFSO.FileExists(colArgs.Item("Script")) Then
intReturn = 1805
End If
Else
intReturn = 1639
End If
If Not intReturn Then
msgBox colArgs.Item("Script"), 0, "Script"
Else
msgBox intReturn, 0, "Error"
End If
我的期望是,如果我根本不提供名为 Script 的参数,我会得到值为 1639 的错误消息框。相反,我得到了良好的 msgBox,脚本为空白。
我也试过
If Not colArgs.Item("Script") = "" Then
编辑:根据@Tomalak,我现在有了这个
Option Explicit
Dim objShell, objFSO, colArgs, intReturn
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = WScript.Arguments.Named
If Not IsEmpty(colArgs.Item("Script")) Then
If Not objFSO.FileExists(colArgs.Item("Script")) Then
intReturn = 1805
End If
Else
intReturn = 1639
End If
If IsEmpty(intReturn) Then
msgBox colArgs.Item("Script"), 0, "Script"
Else
msgBox intReturn, 0, "Error"
End If
为了它的价值,我像这样从 PowerShell 调用 VBScript
$script = "\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\Helper\Helper Target.ps1"
$arguments ="`"\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\Helper\PxHelper.vbs`" //nologo /script:`"$script`" /wait:1"
Start-Process -filePath:Wscript.exe -argumentList:$arguments
现在,即使提供了脚本,我也会遇到错误情况。哎呀,星期一。
如果命令行中没有给出命名参数
WScript.Arguments.Named.Exists("argname")
将 return False
WScript.Arguments.Named("argname")
将 return 一个 空值
如果给出了命名参数但未在命令行上赋值(/argname
)
WScript.Arguments.Named.Exists("argname")
将 return True
WScript.Arguments.Named("argname")
将 return 一个 空值
如果在命令行中给定的命名参数带有空字符串(/argname:
)
WScript.Arguments.Named.Exists("argname")
将 return True
WScript.Arguments.Named("argname")
将 return 一个 空字符串
如果命名参数在命令行中给出了一个值(/argname:value
)
WScript.Arguments.Named.Exists("argname")
将 return True
WScript.Arguments.Named("argname")
将 return 具有该值的字符串
空值不同于空字符串:它们是未初始化的,而空字符串是零长度的常规字符串。
您可以使用 IsEmpty()
函数检查空值。
If Not WScript.Arguments.Named.Exists("foo") Then
' show message / end script / use default
End If
If IsEmpty(WScript.Arguments.Named("foo")) Then
' show message / end script / use default
End If
我想在验证该参数之前测试是否提供了特定的命名参数,因此我可以为缺失和无效条件提供有意义的错误代码。 我现在有这个
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = WScript.Arguments.Named
If colArgs.Item("Script") Then
If not objFSO.FileExists(colArgs.Item("Script")) Then
intReturn = 1805
End If
Else
intReturn = 1639
End If
If Not intReturn Then
msgBox colArgs.Item("Script"), 0, "Script"
Else
msgBox intReturn, 0, "Error"
End If
我的期望是,如果我根本不提供名为 Script 的参数,我会得到值为 1639 的错误消息框。相反,我得到了良好的 msgBox,脚本为空白。 我也试过
If Not colArgs.Item("Script") = "" Then
编辑:根据@Tomalak,我现在有了这个
Option Explicit
Dim objShell, objFSO, colArgs, intReturn
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = WScript.Arguments.Named
If Not IsEmpty(colArgs.Item("Script")) Then
If Not objFSO.FileExists(colArgs.Item("Script")) Then
intReturn = 1805
End If
Else
intReturn = 1639
End If
If IsEmpty(intReturn) Then
msgBox colArgs.Item("Script"), 0, "Script"
Else
msgBox intReturn, 0, "Error"
End If
为了它的价值,我像这样从 PowerShell 调用 VBScript
$script = "\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\Helper\Helper Target.ps1"
$arguments ="`"\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\Helper\PxHelper.vbs`" //nologo /script:`"$script`" /wait:1"
Start-Process -filePath:Wscript.exe -argumentList:$arguments
现在,即使提供了脚本,我也会遇到错误情况。哎呀,星期一。
如果命令行中没有给出命名参数
WScript.Arguments.Named.Exists("argname")
将 returnFalse
WScript.Arguments.Named("argname")
将 return 一个 空值
如果给出了命名参数但未在命令行上赋值(/argname
)
WScript.Arguments.Named.Exists("argname")
将 returnTrue
WScript.Arguments.Named("argname")
将 return 一个 空值
如果在命令行中给定的命名参数带有空字符串(/argname:
)
WScript.Arguments.Named.Exists("argname")
将 returnTrue
WScript.Arguments.Named("argname")
将 return 一个 空字符串
如果命名参数在命令行中给出了一个值(/argname:value
)
WScript.Arguments.Named.Exists("argname")
将 returnTrue
WScript.Arguments.Named("argname")
将 return 具有该值的字符串
空值不同于空字符串:它们是未初始化的,而空字符串是零长度的常规字符串。
您可以使用 IsEmpty()
函数检查空值。
If Not WScript.Arguments.Named.Exists("foo") Then
' show message / end script / use default
End If
If IsEmpty(WScript.Arguments.Named("foo")) Then
' show message / end script / use default
End If