2010-08-11 21 views
0

Je voudrais pouvoir appeler la commande cmd suivante à partir d'un script VBS:vbs cmd espace de chemin

cmd Client\setupclient.exe /q /targetdir "c:\program files\Microsoft CRM" 

je suis venu avec le script VBS suivant:

Set oShell = WScript.CreateObject ("WScript.Shell") 
oShell.Run "cmd /c Client\setupclient.exe /q /targetdir c:\program files\Microsoft CRM", 1, true 

En ce qui concerne en ce qui me concerne, cela fonctionnerait correctement si le targetdir n'avait pas d'espaces, par exemple c: \ bla. Ensuite, l'application serait installée dans ce dossier particulier.

La question évidente est, comment puis-je définir le targetdir avec des espaces comme l'emplacement du chemin.
J'ai essayé de l'entourer avec '' mais cela n'a pas fonctionné pour moi. Aucune suggestion?

Vive chris

Répondre

2

chemins avec des espaces sont généralement enfermés dans des guillemets ("). Dans VBScript, pour insérer un guillemet dans une chaîne, utilisez des guillemets doubles (""). Donc, votre code devrait ressembler à ceci:

oShell.Run "cmd /c Client\setupclient.exe /q /targetdir ""c:\program files\Microsoft CRM""", 1, true 

Aussi, je ne sais pas si cmd /c est réellement nécessaire ici, il pourrait fonctionner de cette façon aussi:

oShell.Run "Client\setupclient.exe /q /targetdir ""c:\program files\Microsoft CRM""", 1, true 
0

J'ai fini avec

AMPath = "E:\Program Files (x86)\Dropbox\Client\Dropbox.exe" 
If FileSyst.Fileexists(AMPath) Then 
AMPath = chr(34) & AMPath & chr(34) 
OBJ_Shell.run (AMPath) 
End If 
0

1, Si votre système d'exploitation prend en charge les nom de fichier 8.3, vous pouvez essayer nom de fichier court:

cd c:\ 
dir /x 
2017/04/17 20:53 <DIR>   PROGRA~1  Program Files 
2017/04/18 03:40 <DIR>   PROGRA~2  Program Files (x86) 

Puis repalez C: \ Program Files \ avec PROGRA ~ 1.

2, utilisez deux guillemets doubles dans le chemin complet.

WScript.CreateObject("WScript.Shell").Run """C:\Program Files\DirName\FileName.exe"" /option1 value1 /option2 vaule2 argv3" 
0

Ceci n'est pas exactement le problème décrit, car le programme appelé plutôt qu'un paramètre contient un espace. Googling "whshell.run ne fonctionne pas si le nom de fichier contient des blancs" m'a eu ici.

Lorsque le programme appelé contient un espace dans son nom, il doit être entre guillemets. (Les guillemets de début et de fin définissent une chaîne avec des espaces et les guillemets doubles sont mappés à des guillemets simples dans cette chaîne.) Il existe deux exemples de travail. Le premier utilise des guillemets triples. La seconde supprime effectivement les blancs du nom. Les exemples non fonctionnels montrent ce qu'il ne faut pas faire (et ce que j'ai essayé en premier.)

' Drive D:\Program Files\Batch\Monitor.bat with no associated command window 

Set WshShell = CreateObject("WScript.Shell") 

' These methods work: (Select one) 
    Return = WshShell.Run("""D:\Program Files\Batch\Monitor.bat""", 0) 
' Return = WshShell.Run("D:\.D-DISK\Monitor.bat", 0) 
' Note: Here "D:\.D-DISK\Monitor.bat" is a symbolic link to 
'  "D:\Program Files\Batch\Monitor.bat" 

' The following methods fail because of the space in the filename. 
' WshShell.Run(chr(34) & D:\Program Files\Batch\Monitor.bat & Chr(34), 0) 
' Return = WshShell.Run("D:\Program Files\Batch\Monitor.bat", 0) 
' Return = WshShell.Run(""D:\Program Files\Batch\Monitor.bat"", 0) 

Set WshShell = Nothing