Включите свои параметры в кавычки. Поскольку VBScript использует "
для строковых литералов, вам нужно, чтобы избежать его путем удвоения его ""
или вы можете использовать функцию Chr()
, чтобы указать символ кавычки:
TestVar1 = "Something 1"
TestVar2 = "Something 2"
Dim strParams
strParams = strParams & " " & Chr(34) & TestVar1 & Chr(34)
strParams = strParams & " " & Chr(34) & TestVar2 & Chr(34)
wshShell.Run "updater.hta" & strParams
В вашем HTA, то Arguments
коллекция не доступна. Вместо этого вам необходимо проанализировать свойство CommandLine
объекта HTA. В этом случае CommandLine
получил ваш ОМТ будет выглядеть следующим образом:
"updater.hta" "Something 1" "Something 2"
Так у вас есть два варианта, чтобы получить ваши аргументы. Вы можете использовать регулярное выражение, чтобы захватить все в кавычках, или вы можете Split()
CommandLine
на кавычки. Если у вас есть котировки в пределах одного из ваших параметров, все становится сложнее, и вы можете захотеть использовать другой символ для включения ваших параметров.
Вот скелет HTA, который использует Split()
извлечь аргументы:
<head>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME="HTA Test"
>
</head>
<script language="VBScript">
Sub Window_OnLoad()
a = Split(myhta.CommandLine, Chr(34))
MsgBox "Arg 1 = " & a(3)
MsgBox "Arg 2 = " & a(5)
End Sub
</script>
При использовании Split()
, вы получите что-то вроде следующего:
a = Split(myhta.CommandLine, Chr(34))
' a(0) = <blank>
' a(1) = "updater.hta"
' a(2) = " "
' a(3) = "Something 1"
' a(4) = " "
' a(5) = "Something 2"
' a(6) = <blank>
Так a(3)
станет вашим первым аргументом и a(5)
станет вашим вторым.
Если вы хотите использовать регулярное выражение, оно становится:
Sub Window_OnLoad()
With New RegExp
.Global = True
.Pattern = """([^""]+)"""
Set c = .Execute(myhta.CommandLine)
End With
For i = 1 To c.Count - 1 ' Skip i = 0 (the HTA filename)
MsgBox "Arg " & i & " = " & c(i).SubMatches(0)
Next
End Sub
Это выведет:
Arg 1 = Something 1
Arg 2 = Something 2
Извините быть боль, но я стараюсь, чтобы изучить этот материал из Интернета хе-хе. Можете ли вы изменить свой очень полезный ответ на то, что было бы в VBS и в HTA, чтобы облегчить мост с помощью примера regex? Спасибо. Главное, что я перехожу к обновлению из файла VBS, это расположение скриптов, я создаю переносную оболочку для некоторых программ, и я передаю управление HTA для выполнения некоторых операций с файлами (при необходимости заменяя платформу). Поэтому я не должен пропускать ничего с кавычками, просто файловыми путями и именами и т. Д. –
Первый блок кода - это файл VBS. Это просто устанавливает вызов HTA и передает параметры. Остальное относится к ОМТ. Я показал скелет HTA, чтобы вы могли увидеть, как ID ('ID =" myhta ") используется позже для запроса свойства' CommandLine'.Событие «Window_OnLoad()» HTA - это то, где вы будете захватывать переданные аргументы. В этом же скелете HTA я показываю, как вы можете 'Split()' свойство 'CommandLine' (вариант 1). В конце ответа я показываю альтернативное событие 'Window_OnLoad()', которое использует регулярное выражение вместо 'Split()' (опция 2). – Bond
Вы можете использовать "" "" вместо chr (34) - намного проще и быстрее ввести – cup