Tengo este script guardado en "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
Cuando ejecuto el script, quiero pasar el valor de la variable "workFolder".
¿Cómo puedo hacer esto? ¿Puedo hacerlo? ¿Algo como "cscript test.vbs workFolder: 'C: \ temp \'" quizás?
Pregunta adicional: ¿Es necesario limpiar la variable pasada con "Set workFolder = Nothing" o VBSCript lo hace automáticamente cuando termina? ¿Quizás "Set File = Nothing" y "Set FSO = Nothing" también sean innecesarios? Por favor, avíseme si conoce la respuesta a ambas preguntas.
Dentro de VBS puede acceder a los parámetros con
Wscript.Arguments(0) Wscript.Arguments(1)
y así. El número de parámetro:
fuente
Se puede acceder a cada argumento pasado a través de la línea de comando con: Wscript.Arguments.Item (0) Donde el cero es el número de argumento: es decir, 0, 1, 2, 3, etc.
Entonces en su código podría tener:
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
Con wscript.arguments.count, puede capturar errores en caso de que alguien no ingrese el valor adecuado, etc.
Ejemplos de MS Technet
fuente
workFolder
no está definido como un objeto ni en la respuesta anterior ni en la pregunta original, por lo queSet workFolder = Nothing
debería generar un error. 2) Como no se sugiere que el argumento deba reutilizarse más de una vez, tal vez omita asignarlo a lastrFolder
variable. 3) Sugeriría usar enx
lugar de0
enWscript.Arguments.Item(0)
También puede usar argumentos con nombre que son opcionales y se pueden dar en cualquier orden.
Set namedArguments = WScript.Arguments.Named
Aquí hay una pequeña función de ayuda:
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
Ejemplo de VBS:
'[test.vbs] testArg = GetNamedArgument("testArg", "-unknown-") wscript.Echo now &": "& testArg
Ejemplo de uso:
test.vbs /testArg:123
fuente
Para responder a su pregunta adicional, la respuesta general es no, no es necesario establecer las variables en "Nada" en breves scripts .VBS como el suyo, que son llamados por Wscript o Cscript.
La razón por la que podría hacer esto en medio de una secuencia de comandos más larga es para liberar memoria al sistema operativo que, de otro modo, VB habría estado reteniendo. En estos días, cuando 8GB de RAM son típicos y 16GB + relativamente comunes, es poco probable que esto produzca un impacto medible, incluso en un script enorme que tiene varios megabytes en una sola variable. En este punto, es una especie de retención de los días en los que podría haber estado trabajando con 1 MB o 2 MB de RAM.
Tiene razón, en el momento en que se completa su script .VBS, todas sus variables se destruyen y la memoria se recupera de todos modos. Establecer variables en "Nada" simplemente acelera ese proceso y le permite hacerlo en medio de un script.
fuente