Подтвердить что ты не робот

Могу ли я передать аргумент VBScript (файл vbs, запущенный cscript)?

У меня этот script сохранен в "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

Когда я запускаю script, я хочу передать значение переменной "workFolder".

Как я могу это сделать? Могу ли я это сделать? Что-то вроде "cscript test.vbs workFolder: 'C:\temp \'" возможно?

Бонусный вопрос: необходимо ли очищать переданную переменную с помощью "Set workFolder = Nothing" или VBSCript делает это автоматически, когда он завершается? Может быть, "Set File = Nothing" и "Set FSO = Nothing" тоже не требуется? Пожалуйста, дайте мне знать, если вы знаете ответ на оба этих вопроса.

4b9b3361

Ответ 1

Вы можете использовать WScript.Arguments для доступа к аргументам, переданным вашему script.

Вызов script:

cscript.exe test.vbs "C:\temp\"

Внутри script:

Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)

Не забудьте проверить, действительно ли был аргумент, переданный вашему script. Вы можете сделать это, проверив свойство Count:

if WScript.Arguments.Count = 0 then
    WScript.Echo "Missing parameters"
end if

Если ваш script завершен после закрытия файла, нет необходимости устанавливать переменные в Nothing. Ресурсы будут очищены автоматически, когда процесс cscript.exe завершится. Установка переменной в Nothing обычно необходима только в том случае, если вы явно хотите освобождать ресурсы во время выполнения вашего script. В этом случае вы должны установить переменные, которые содержат ссылку на COM-объект, на Nothing, который освободит объект COM до завершения вашего script. Это всего лишь короткий ответ на ваш вопрос о бонусе, вы найдете больше информации по этим связанным вопросам:

Нужно ли устанавливать объекты в Nothing внутри функций VBA

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

Ответ 2

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

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

и т.д. Число параметров:

Wscript.Arguments.Count

Ответ 3

Каждый аргумент, переданный через командную строку, может быть доступен с помощью: 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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

Попробуйте это, чтобы получить все аргументы:

Set Args=WSH.Arguments
For x=0 To Args.Count-1
 WSH.Echo "Arg_"&x+1&" = "&Args(x)
Next