Могу ли я передать аргумент 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

когда я должен установить переменную в "Ничего" в VB6?


внутри 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.аргументы.граф, вас могут подстерегать ошибки в случае, если кто-то не введите нужное значение и т. д.

примеры MS Technet


на самом деле ответ на бонусный вопрос будет "нет". Тебе не нужно убираться. Но общая практика программирования-всегда убирать свои вещи, например, после обеда, пожалуйста, очистите свою тарелку.


при обучении новых программистов правильный ответ на вопрос"Должен ли я убирать?"всегда " да". Если кто-то имеет привычку убирать, тогда он будет убирать. Затем, когда это действительно необходимо (чтобы не сделать беспорядок из кучи и т. д.), очистка является привычкой и произойдет.

лучший вопрос: "вызывает ли это проблему, если я очищаю в конце этого сценария?"или даже лучше... "Предполагая, что я продолжаю работать с длинным скриптом( или у меня нет GC), это правильный способ очистки этих объектов?"

мои два цента. Пол!--1-->