Могу ли я передать аргумент в VBScript (файл vbs, запущенный с помощью cscript)?
У меня есть этот скрипт, сохраненный в "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" - это тоже ненужно? Пожалуйста, дайте мне знать, если вы знаете ответ на оба эти вопроса.
5 ответов:
можно использовать
WScript.Arguments
для доступа к аргументам, переданным в скрипт.вызова скрипта:
cscript.exe test.vbs "C:\temp\"
внутри вашего скрипта:
Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)
Не забудьте проверить, действительно ли был передан аргумент в ваш скрипт. Вы можете сделать это, проверив
Count
свойства:if WScript.Arguments.Count = 0 then WScript.Echo "Missing parameters" end if
если ваш скрипт после закрытия файла, то есть нет необходимости устанавливать переменные
Nothing
. Ресурсы будут очищены автоматически, когда cscript.процесс exe прекращает свою работу. Установка переменной вNothing
обычно требуется только в том случае, если вы явно хотите освободить ресурсы во время выполнения вашего скрипта. В этом случае нужно установить переменные, которые содержат ссылку на COM-объект вNothing
, который освободит COM-объект до завершения вашего скрипта. Это всего лишь короткий ответ на ваш бонусный вопрос, вы найдете дополнительную информацию в этих связанных вопросах:есть ли необходимость устанавливать объекты в ничто внутри функций VBA
внутри VBS вы можете получить доступ к параметрам с
Wscript.Arguments(0) Wscript.Arguments(1)
и так далее. Количество параметров:
Wscript.Arguments.Count
каждый аргумент, передаваемый через командную строку, можно получить с помощью: Wscript.Аргументы.Элемент(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.аргументы.граф, вас могут подстерегать ошибки в случае, если кто-то не введите нужное значение и т. д.
на самом деле ответ на бонусный вопрос будет "нет". Тебе не нужно убираться. Но общая практика программирования заключается в том, чтобы всегда убирать свои вещи, например, после обеда, пожалуйста, очистите свою тарелку.
для обучения новых программистов, правильный ответ на "Я должен убирать?- это всегда да. Если у вас есть привычка убирать, то вы будете убирать. Затем, когда это действительно требуется (чтобы не сделать беспорядок из кучи и т. д.), очистка является привычкой и произойдет.
лучший вопрос: "вызывает ли это проблему, если я очищаю в конце этого сценария?"или даже лучше... "Предполагая, что я продолжаю работать с длинным скриптом (или у меня нет GC), это правильный способ очистить эти объекты?"
мои два цента. Пол