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

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), это правильный способ очистить эти объекты?"

мои два цента. Пол