TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

sábado, 6 de junio de 2015

Solution of spaces in the path of the Shell Function in Visual Basic / Solucion definitova para los espacios en las rutas con la función Shell en Visual Basic

Cuando queremos que sea ejecutado un comando (o programa) de MSDOS desde nuestro programa de Visual Basic solemos recurrir a la función SHELL. De tal manera:
When we want a MSDOS command (or program) to be run from our Visual Basic program SHELL usually resort to function. Such a way:

programa.exe -a -b -c parametro1 parametro2

Escribiremos en nuestro programa:
We write in our program:

Shell  "programa.exe -a -b -c parametro1 parametro2",0

El problema reside cuando hay espacios en blanco:
The problem is when there are blanks spaces:

C:\Ruta del programa\programa.exe -a -b -c parametro con espacios 2 parametro con espacios 2

Está claro que esto no funciona ni en el terminal. Deberíamos escribir:
Clearly, this does not work or the terminal. We should write:

"C:\Ruta del programa\programa.exe" -a -b -c "parametro con espacios 2" "parametro con espacios 2"

Y esperamos que en nuestro programa podamos escribir:
And we hope that in our program we can write:

Dim ccc as string
ccc=chr(34) ' carácter espacial comillas
Shell  ccc & "C:\Ruta del programa\programa.exe" & ccc & " -a -b -c " & ccc & "parametro con espacios 1" & ccc & " " & ccc & "parametro con espacios2" & ccc,0

Si funciona hemos terminado con el problema.
If it works we have done with the problem.

Si no funciona ¿Qué está ocurriendo? ¿Porque funcionan las comillas en MSDOS, en la terminal y no funciona desde Shell.
Case of malfunction what is happening? Why the quotes work on MSDOS, in the terminal and does not work from Shell.

Solución definitiva / Ultimate solution


Esta solución deberíamos intentarla cuando todo sale mal porque es muy retorcida. Lo que haremos será crear un archivo .bat (archivo de procesamiento por lotes) y luego ejecutar éste desde Shell.
This solution should try it when everything goes wrong because it is so twisted. What we will do is create a .bat file (batch) and then run it from Shell.

Dim ccc,tal as string
ccc=chr(34) ' carácter espacial comillas
tal = ccc & "C:\Ruta del programa\programa.exe" & ccc & " -a -b -c " & ccc & "parametro con espacios 1" & ccc & " " & ccc & "parametro con espacios2" & ccc
Open App.Path + "\pepa.bat" For Output As #1
        Print #1, tal
Close #1
Shell App.Path + "\pepa.bat",0


Otro tema es la asincronía del programa Shell esto lo salvaremos en la siguiente entrega.
Another issue is the asynchrony of the Shell program. This will be saved in the next installment.


No hay comentarios:

Publicar un comentario