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