Могу ли я передать аргумент в 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), это правильный способ очистить эти объекты?"
мои два цента. Пол