¿Puedo pasar un argumento a un VBScript (archivo vbs iniciado con cscript)?

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 “Establecer workFolder = Nothing” o lo hace VBSCript automáticamente cuando finaliza? ¿Tal vez “Establecer archivo = Nada” y “Establecer FSO = Nada” es innecesario también? Por favor, avíseme si conoce la respuesta a estas dos preguntas.

Puede usar WScript.Arguments para acceder a los argumentos pasados ​​a su script.

Llamar a la secuencia de comandos:

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

Dentro de tu script:

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

No te olvides de verificar si realmente ha habido un argumento pasado a tu script. Puede hacerlo marcando la propiedad Count :

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

Si su secuencia de comandos finaliza después de cerrar el archivo, entonces no hay necesidad de establecer las variables en Nothing . Los recursos se limpiarán automáticamente cuando finalice el proceso cscript.exe. Establecer una variable en Nothing normalmente solo es necesario si desea liberar recursos explícitamente durante la ejecución de su script. En ese caso, establecería las variables que contienen una referencia a un objeto COM en Nothing , lo que liberaría el objeto COM antes de que termine su script. Esta es solo una breve respuesta a su pregunta de bonificación, encontrará más información en estas preguntas relacionadas:

¿Hay alguna necesidad de establecer objetos a nada dentro de las funciones de VBA?

¿Cuándo debo configurar una variable para “Nothing” en VB6?

Dentro de VBS puedes acceder a los parámetros con

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

y así. El número de parámetro:

 Wscript.Arguments.Count 

Cada argumento pasado a través de la línea de comando se puede acceder con: Wscript.Arguments.Item (0) Donde el cero es el número del argumento: es decir, 0, 1, 2, 3 etc.

Entonces en tu código podrías 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 

Usando wscript.arguments.count, puede capturar errores en caso de que alguien no ingrese el valor correcto, etc.

Ejemplos de MS Technet

En realidad, la respuesta a la pregunta de bonificación es “No”. No es necesario que limpie. Pero la práctica general de progtwigción es siempre limpiar sus cosas, como después de su cena, por favor limpie su plato.

Al enseñar a los nuevos progtwigdores, la respuesta correcta es “¿debería limpiar?” siempre es sí Si uno tiene la costumbre de limpiar, entonces uno limpiará. Luego, cuando en realidad se requiere (para que no se ensucie el montón, etc.), la limpieza es un hábito y sucederá.

La mejor pregunta es “¿Causa un problema si limpio al final de este script?” o incluso mejor … “Suponiendo que sigo con un guión largo (o no tengo GC disponible), ¿es esta la forma correcta de limpiar estos objetos?”

Mis dos centavos. Pablo