Tenho este script salvo em "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
Quando executo o script, desejo passar o valor da variável "workFolder".
Como posso fazer isso? Posso fazer isso? Algo como "cscript test.vbs workFolder: 'C: \ temp \'" talvez?
Pergunta bônus: É necessário limpar a variável passada com "Set workFolder = Nothing" ou o VBSCript faz isso automaticamente quando termina? Talvez "Set File = Nothing" e "Set FSO = Nothing" também sejam desnecessários? Informe-nos se souber a resposta a essas duas perguntas.
Dentro do VBS você pode acessar parâmetros com
Wscript.Arguments(0) Wscript.Arguments(1)
e assim por diante. O número do parâmetro:
fonte
Cada argumento passado via linha de comando pode ser acessado com: Wscript.Arguments.Item (0) Onde o zero é o número do argumento: ou seja, 0, 1, 2, 3 etc.
Portanto, em seu código, você poderia ter:
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
Usando wscript.arguments.count, você pode fazer uma armadilha de erro caso alguém não insira o valor adequado etc.
Exemplos de MS Technet
fonte
workFolder
não é definido como um objeto na resposta acima ou na pergunta original, portanto,Set workFolder = Nothing
deve gerar um erro. 2) Como o argumento não é sugerido como precisando ser reutilizado mais de uma vez, talvez ignore atribuí-lo àstrFolder
variável. 3)x
0
Wscript.Arguments.Item(0)
Você também pode usar argumentos nomeados que são opcionais e podem ser fornecidos em qualquer ordem.
Set namedArguments = WScript.Arguments.Named
Aqui está uma pequena função auxiliar:
Function GetNamedArgument(ByVal argumentName, ByVal defaultValue) If WScript.Arguments.Named.Exists(argumentName) Then GetNamedArgument = WScript.Arguments.Named.Item(argumentName) Else GetNamedArgument = defaultValue End If End Function
Exemplo VBS:
'[test.vbs] testArg = GetNamedArgument("testArg", "-unknown-") wscript.Echo now &": "& testArg
Exemplo de uso:
test.vbs /testArg:123
fonte
Para responder à sua pergunta bônus, a resposta geral é não, você não precisa definir as variáveis como "Nada" em scripts .VBS curtos como o seu, que são chamados por Wscript ou Cscript.
O motivo pelo qual você pode fazer isso no meio de um script mais longo é liberar memória de volta para o sistema operacional que o VB teria mantido. Hoje em dia, quando 8 GB de RAM é típico e 16 GB + relativamente comum, é improvável que isso produza qualquer impacto mensurável, mesmo em um script enorme que tem vários megabytes em uma única variável. Neste ponto, é uma espécie de atraso dos dias em que você trabalhava com 1 MB ou 2 MB de RAM.
Você está correto, no momento em que seu script .VBS é concluído, todas as suas variáveis são destruídas e a memória é recuperada de qualquer maneira. Definir as variáveis como "Nada" simplesmente acelera esse processo e permite que você faça isso no meio de um script.
fonte