Могу ли я передать аргумент в VBScript (файл VBS, запущенный с Cscript)? - PullRequest
75 голосов
/ 11 мая 2010

У меня есть этот скрипт, сохраненный в "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" также не нужны? Пожалуйста, дайте мне знать, если вы знаете ответ на оба эти вопроса.

Ответы [ 3 ]

126 голосов
/ 11 мая 2010

Вы можете использовать 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

Когда я должен установить переменную на «Nothing» в VB6?

18 голосов
/ 11 мая 2010

Внутри VBS вы можете получить доступ к параметрам с помощью

Wscript.Arguments(0)
Wscript.Arguments(1)

и так далее. Номер параметра:

Wscript.Arguments.Count
5 голосов
/ 11 мая 2010

Каждый аргумент, переданный через командную строку, доступен с помощью: Wscript.Arguments.Item (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.arguments.count, вы можете перехватить ошибку, если кто-то не введет правильное значение и т. Д.

Примеры MS Technet

...