2015-08-02 6 views
2

Я работаю над некоторыми сценариями в VBScript, мне нужно передать некоторые значения переменных вместе с HTA, которые я собираюсь использовать в качестве интерфейса, чтобы показать, что обновление имеет место.VBScript - передать аргумент HTA

Как бы я это сделал?

VBScript------- 

TestVar1 = "Something 1" 
TestVar2 = "Something 2" 

wshShell.Run "Updater.hta " & TestVar1 & TestVar2 

Тогда

HTA------- 

TestVar1 = Something.Arguments(0) 
TestVar2 = Something.Arguments(1) 

Msgbox TestVar1 
Msgbox TestVar2 

Я понимаю, что это еще не совсем правильный код, я просто поместить его, чтобы проиллюстрировать то, что я пытаюсь сделать.

Любая помощь, которую вы, ребята, можете решить при решении этого, было бы здорово, спасибо!

ответ

3

Включите свои параметры в кавычки. Поскольку 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 
+0

Извините быть боль, но я стараюсь, чтобы изучить этот материал из Интернета хе-хе. Можете ли вы изменить свой очень полезный ответ на то, что было бы в VBS и в HTA, чтобы облегчить мост с помощью примера regex? Спасибо. Главное, что я перехожу к обновлению из файла VBS, это расположение скриптов, я создаю переносную оболочку для некоторых программ, и я передаю управление HTA для выполнения некоторых операций с файлами (при необходимости заменяя платформу). Поэтому я не должен пропускать ничего с кавычками, просто файловыми путями и именами и т. Д. –

+0

Первый блок кода - это файл VBS. Это просто устанавливает вызов HTA и передает параметры. Остальное относится к ОМТ. Я показал скелет HTA, чтобы вы могли увидеть, как ID ('ID =" myhta ") используется позже для запроса свойства' CommandLine'.Событие «Window_OnLoad()» HTA - это то, где вы будете захватывать переданные аргументы. В этом же скелете HTA я показываю, как вы можете 'Split()' свойство 'CommandLine' (вариант 1). В конце ответа я показываю альтернативное событие 'Window_OnLoad()', которое использует регулярное выражение вместо 'Split()' (опция 2). – Bond

+0

Вы можете использовать "" "" вместо chr (34) - намного проще и быстрее ввести – cup

Смежные вопросы