2010-05-10 18 views
67

tengo este script guardado en "test.vbs":¿Puedo pasar un argumento a un VBScript (archivo vbs iniciado con cscript)?

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 que quieren pasar el valor de la "workFolder" variable.

¿Cómo puedo hacer esto? ¿Puedo hacerlo? Algo como "cscript test.vbs workFolder: 'C: \ temp \'" quizás?

Bono pregunta: ¿Es necesario recurrir a limpiar la variable pasada con "Set workFolder = Nada" o no VBSCript hacer eso de forma automática cuando se termina? ¿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.

Respuesta

112

Puede utilizar WScript.Arguments acceder a los argumentos pasados ​​al script.

llamar al script:

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

Dentro de la secuencia de comandos:

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

No se olvide de comprobar si ha habido realmente un argumento pasado a la secuencia de comandos. Puede hacerlo mediante la comprobación de la propiedad Count:

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

Si su script ha terminado después de cerrar el archivo, entonces no hay necesidad de ajustar las variables de Nothing. Los recursos se limpiarán automáticamente cuando finalice el proceso cscript.exe. Por lo general, establecer una variable en Nothing 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, que liberaría el objeto COM antes de que termine su secuencia de comandos. Esto es sólo una breve respuesta a su pregunta extra, encontrará más información en estas preguntas relacionadas:

Is there a need to set Objects to Nothing inside VBA Functions

When must I set a variable to “Nothing” in VB6?

+0

bingo, eso es todo! Muy claro, muchas gracias. (La pregunta de bonificación aún está abierta en caso de que alguien quiera responderla en uno de estos comentarios). – Peter

+0

@Peter: He agregado una respuesta breve a su pregunta de bonificación. –

5

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

Así que 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 

Usando wscript.arguments.count, puede error de captura en caso de que alguien no entra en el valor adecuado, etc.

MS Technet examples

+0

Aha, gracias hombre. Es interesante que no tengas que crear una instancia de Wcript. (La pregunta de bonificación todavía está abierta por si alguien quiere responder en uno de estos comentarios.) – Peter

+0

1) 'workFolder' no se define como un objeto, ya sea en la respuesta anterior, o la pregunta original, por lo que' Set workFolder = nada 'debería generar un error. 2) Como no se sugiere que el Argumento necesite ser reutilizado más de una vez, quizás omita asignarlo a la variable 'strFolder'. 3) Se recomienda usar 'x' en lugar de' '0' en Wscript.Arguments.Item (0)' – user66001

+0

En realidad sería no generará un error si no se establece la opción explícita, y en ese caso no funcionaría, ya que nada se ha definido . Sin embargo, eso es cierto acerca de la variable, no es necesaria, ni tampoco se pueden utilizar los objetos FSO o FILE y un simple con. Una tonelada de diferentes enfoques posibles ... :) – unrealtrip

16

En el interior de la EBV se puede acceder a los parámetros con

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

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

Wscript.Arguments.Count 
+0

¡Gracias! (La pregunta de bonificación aún está abierta en caso de que alguien quiera responderla en uno de estos comentarios). – Peter

2

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

2

Al enseñar a los nuevos programadores, la respuesta correcta a "debo 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 se limpia al final de este guión?" 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?"

mi granito de arena. Paul

Cuestiones relacionadas