У меня есть этот сценарий, сохраненный в "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
Когда я запускаю сценарий, я хочу передать значение переменной «workFolder».
Как я могу это сделать? Могу ли я это сделать? Что-то вроде "cscript test.vbs workFolder: 'C: \ temp \'"?
Дополнительный вопрос: необходимо ли очищать переданную переменную с помощью «Set workFolder = Nothing» или VBSCript делает это автоматически после завершения работы? Может быть, "Set File = Nothing" и "Set FSO = Nothing" тоже не нужны? Пожалуйста, дайте мне знать, если вы знаете ответ на оба эти вопроса.
Внутри VBS вы можете получить доступ к параметрам с помощью
Wscript.Arguments(0) Wscript.Arguments(1)
и так далее. Количество параметра:
источник
К каждому аргументу, переданному через командную строку, можно получить доступ с помощью: Wscript.Arguments.Item (0), где ноль - это номер аргумента: т.е. 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
Используя wscript.arguments.count, вы можете отловить ошибку, если кто-то не введет правильное значение и т. Д.
Примеры MS Technet
источник
workFolder
не определен как объект ни в приведенном выше ответе, ни в исходном вопросе, поэтомуSet workFolder = Nothing
должен вызвать ошибку. 2) Поскольку аргумент не предполагается как требующий повторного использования более одного раза, возможно, пропустите его присвоениеstrFolder
переменной. 3) Предлагаю использоватьx
вместо0
inWscript.Arguments.Item(0)
Вы также можете использовать именованные аргументы, которые являются необязательными и могут быть указаны в любом порядке.
Set namedArguments = WScript.Arguments.Named
Вот небольшая вспомогательная функция:
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
Пример VBS:
'[test.vbs] testArg = GetNamedArgument("testArg", "-unknown-") wscript.Echo now &": "& testArg
Пример использования:
test.vbs /testArg:123
источник
Чтобы ответить на ваш бонусный вопрос, общий ответ - нет, вам не нужно устанавливать переменные на «Nothing» в коротких .VBS-скриптах, подобных вашему, которые вызываются Wscript или Cscript.
Причина, по которой вы можете сделать это в середине более длинного сценария, состоит в том, чтобы вернуть память операционной системе, которую в противном случае удерживал бы VB. В наши дни, когда 8 ГБ ОЗУ является типичным и 16 ГБ + относительно обычным, это вряд ли окажет какое-либо измеримое влияние, даже на огромный скрипт, который содержит несколько мегабайт в одной переменной. На данный момент это своего рода пережиток тех дней, когда вы могли работать с 1 или 2 МБ ОЗУ.
Вы правы, в момент завершения вашего .VBS-скрипта все ваши переменные будут уничтожены, а память все равно будет освобождена. Установка для переменных значения «Ничего» просто ускоряет этот процесс и позволяет делать это в середине скрипта.
источник