Pregunta

Me gustaría ser capaz de llamar al siguiente comando cmd desde un script vbs:

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

Se me ocurrió el siguiente script VBS:

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

En lo que a mí respecta, esto funcionaría correctamente si el targetdir tenía ningún espacio, por ejemplo c: \ bla. A continuación, la aplicación se instala en esa carpeta en particular.

La pregunta obvia es, ¿cómo puedo definir el targetdir con espacios como la ubicación de ruta.
Traté de rodearlo con '', pero que no funcionó para mí. ¿Alguna sugerencia?

Saludos Chris

¿Fue útil?

Solución

Trazados con espacios suelen ser encerrados en comillas ("). En VBScript, para insertar un carácter de comillas en una cadena utiliza comillas dobles (""). Por lo tanto, su código debería tener este aspecto:

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

Además, no estoy seguro de si es realmente necesario cmd /c aquí, por lo que podría trabajar de esta manera, así:

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

Otros consejos

terminé con

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 

1, Si sus soportes OS 8.3 nombre del archivo, se puede tratar de nombre de archivo corto:

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)

A continuación, repalce C:. \ Archivos de programa \ con ~ 1

2, utilizar dos comillas dobles dentro de la ruta completa.

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

Esto no es exactamente el problema descrito, en el que el programa que se llama en lugar de un parámetro contiene un espacio. Googlear "whshell.run no funciona si el nombre de archivo contiene espacios en blanco" me tiene aquí.

Cuando el programa llamado contiene un espacio en su nombre, tiene que ser el triple citado. (Las citas de inicio y final definen una cadena con espacios en blanco y las comillas dobles cerrados se asignan a comillas simples dentro de esa cadena.) Hay dos ejemplos de trabajo. El primero utiliza comillas triples. El segundo elimina de forma efectiva las piezas en bruto desde el nombre. Los ejemplos no trabajo muestran qué no hacer (y lo que he intentado en primer lugar.)

' 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top