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