Проверьте, существует ли именованный аргумент VBScript - PullRequest
3 голосов
/ 24 февраля 2020

Я хочу проверить, был ли указан указанный аргумент c перед проверкой этого аргумента, чтобы я мог предоставить значимые коды ошибок для пропущенных и недопустимых условий. У меня есть это сейчас

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, я получу сообщение об ошибке msgBox со значением 1639. Вместо этого я получаю хороший msgBox с пробелом для скрипта. Я также пытался

If Not colArgs.Item("Script") = "" Then

РЕДАКТИРОВАТЬ: Per @ 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

И для чего это стоит, я называю VBScript из PowerShell, как это

$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

И теперь я получаю сообщение об ошибке, даже если сценарий предоставлен. Grrr, понедельник.

1 Ответ

5 голосов
/ 24 февраля 2020

Если в командной строке не указан именованный аргумент

  • WScript.Arguments.Named.Exists("argname") вернет False
  • WScript.Arguments.Named("argname") вернет пустое значение

Если указан аргумент, но ему не присвоено значение в командной строке (/argname)

  • WScript.Arguments.Named.Exists("argname"), будет возвращено True
  • WScript.Arguments.Named("argname") вернет пустое значение

Если в командной строке указан именованный аргумент с пустой строкой (/argname:)

  • WScript.Arguments.Named.Exists("argname") вернет True
  • WScript.Arguments.Named("argname") вернет пустую строку

Если указан аргумент со значением в командной строке (/argname:value)

  • WScript.Arguments.Named.Exists("argname") вернет True
  • WScript.Arguments.Named("argname") вернет строку с этим значением

Пустые значения отличаются от пустых строк: они неинициализированы, тогда как пустая строка представляет собой обычную строку нулевой длины.

Проверить наличие пустых значений можно с помощью функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...