2010-11-16 36 views
15

Al leer y experimentar por mí mismo, VBScript elimina todas las comillas dobles y el argumento. ¿Alguien sabe una forma de evitar esto? ¿Cómo pasar dobles comillas en el script?Comillas dobles en el argumento VBScript

+0

¿quiere decir en Windows Script Host? –

Respuesta

1

Editar: entendido mal la pregunta tan nueva respuesta aquí:

No creo que se puede hacer eso de ninguna manera. Sin embargo, una solución podría ser usar la propiedad CommandLine de la clase Win32_Process, que debería darle la línea de comando completa, creo.

Por ejemplo probar este script:

Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set processes = wmi.ExecQuery("SELECT * FROM Win32_Process") 
For Each proc in processes 
    If InStr(proc.CommandLine, "double quotes") > 0 Then 
     wscript.echo proc.CommandLine 
    End IF 
Next 

Con los parámetros como: "some long commandline enclosed in double quotes here"

+0

Creo que @Dani significa como un parámetro para un script, es decir, 'cscript.exe test.vbs" parameter "' –

+1

Lo que quiere decir: 'C: \> test.vbs" argument "'. – Ruel

+0

@Ruel @oracle Gracias, mi error. –

0

Por desgracia, no sé cualquier método de escape para pasar entre comillas porque es un delimitador de argumento. Todo lo que puedo sugerir es que modifiques tu script o añadas las comillas desde allí.

1

no estoy seguro si esto funciona, pero al pasar el parámetro Creo que se puede hacer algo como -

chr(34) + <your argument string> + chr(34) 

la CDH (34) significa comillas dobles.

+1

Esto, desafortunadamente, solo hace que la cadena literal chr (34) aparezca como un parámetro (o parte de un parámetro). Por ejemplo, si el único parámetro es chr (34) + foo + chr (34), entonces el parámetro analizado será exactamente eso. – jveazey

+0

@John L Veazey - Eso es exactamente lo que OP quiere de su pregunta ¿verdad? No entendí tu punto. Lo siento. –

11

Si ese parámetro requiere cotizaciones Se puede usar un parámetro llamado para identificarlo y luego encierre el valor con las comillas dobles

dim arg 
if WScript.Arguments.Named.Exists("a") then 
    arg = WScript.Arguments.Named("a") 
    arg = chr(34) & arg & chr(34) 
end if 

e usados ​​así:

cscript test.vbs /a:"a parameter" 

pero esto doesn No ayuda si simplemente desea mantener las cotizaciones si se proporcionan. Las comillas simples son aceptadas, por lo que podría usar alternativamente comillas simples (u otro carácter/cadena) y hacer un Replace(arg, "'", chr(34)) para convertir a comillas dobles.

6

Este script obtendrá la línea de comandos tal como es, con comillas dobles y todo a una variable llamada strLine, y mostrarlo:

Set objSWbemServices = GetObject("WinMgmts:Root\Cimv2") 
Set colProcess = objSWbemServices.ExecQuery("Select * From Win32_Process") 
For Each objProcess In colProcess 
    If InStr (objProcess.CommandLine, WScript.ScriptName) <> 0 Then 
     strLine = Mid(objProcess.CommandLine, InStr(objProcess.CommandLine , WScript.ScriptName) + Len(WScript.ScriptName) + 1) 
    End If 
Next 
WScript.Echo(strLine) 

Así ejecución que con:

cscript scriptname.vbs "option" ""other option"" third option 

haría resultado en:

"option" ""other option"" third option 
Cuestiones relacionadas