2010-11-16 10 views
15

À mesure que je lis et expérimente pour moi-même, VBScript supprime toutes les guillemets et arguments. Est-ce que quelqu'un sait un moyen de contourner cela? Comment passer des guillemets doubles dans le script?Guillemets doubles dans l'argument VBScript

+0

voulez-vous dire dans Windows Script Host? –

Répondre

1

Edit: Misunderstood la question si nouvelle réponse ici:

Je ne pense pas que vous pouvez le faire en aucune façon. Toutefois, un travail autour pourrait être d'utiliser la propriété CommandLine de la classe Win32_Process, ce qui devrait vous donner la ligne de commande complète, je pense.

Par exemple, essayez ce 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 

Avec les paramètres suivants: "some long commandline enclosed in double quotes here"

+0

Je pense que le @Dani signifie en tant que paramètre à un script, c.-à-d. "Cscript.exe test.vbs" paramètre "' –

+1

Il signifie: 'C: \> test.vbs" argument "'. – Ruel

+0

@Ruel @oracle Merci, mon erreur. –

0

Malheureusement, je ne sais pas de méthodes d'évasion pour passer des guillemets doubles parce que son délimiteur argument. Tout ce que je peux suggérer est de modifier votre script, ou ajouter les citations à partir de là.

1

Je ne sais pas si cela fonctionne, mais alors que le passage de paramètres que je suppose que vous pouvez faire quelque chose comme -

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

Le chr (34) signifie guillemets doubles.

+1

Ceci, malheureusement, fait juste apparaître la chaine littérale chr (34) comme un paramètre (ou une partie d'un paramètre). Par exemple, si le seul paramètre est chr (34) + foo + chr (34) alors le paramètre analysé sera exactement cela. – jveazey

+0

@John L Veazey - C'est exactement ce que OP veut de sa question à droite? Je n'ai pas compris votre point. Pardon. –

11

Si ce paramètre nécessite devis, vous pouvez utiliser un paramètre nommé pour l'identifier puis mettre la valeur avec les guillemets doubles

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

et utilisés ainsi:

cscript test.vbs /a:"a parameter" 

mais ce doesn Pas d'aide si vous voulez simplement garder des citations si elles sont fournies. Les guillemets simples sont acceptés, donc vous pouvez alternativement utiliser des guillemets simples (ou un autre caractère/une chaîne) et faire un Replace(arg, "'", chr(34)) pour convertir en guillemets.

6

Ce script obtenir la ligne de commande comme il est, avec des guillemets doubles et tout à une variable appelée strLine et l'afficher:

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) 

donc en cours d'exécution qui avec:

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

serait résultat en:

"option" ""other option"" third option