Problema con espacios en nombre de directorio

904 views
Skip to first unread message

Ultraton500

unread,
Jan 19, 2015, 12:01:59 PM1/19/15
to publice...@googlegroups.com
Hola a todos, estoy utilizando el comando RUN para descomprimir un archivo comprimido con 7zip y las siguientes líneas funcionan bien si el nombre del directorio de destino (lcRutaActual) no contiene espacios pero dejan de funcionar si este contiene espacios como se muestra en el ejemplo.

lcRutaActual="C:\SISTEMA\COTIZADOR (FIREBIRD)\"
oShell = CREATEOBJECT("WScript.Shell")
oShell.RUN("7za e &gcArchivo -o&lcRutaActual -aoa -y",0,.T.)

Entre otras cosas intenté agregandole comillas pero no pasa nada.

oShell.RUN("7za e &gcArchivo -o'&lcRutaActual' -aoa -y",0,.T.)

Alguien tiene alguna idea o sugerencia?
Muchas gracias de antemano.

Saludos,
Javier.

Hernan Serrano

unread,
Jan 19, 2015, 1:13:03 PM1/19/15
to publice...@googlegroups.com
prueba asi:
oShell.RUN("7za e "+"&gcArchivo"+"  -o "+"&lcRutaActual"+" -aoa -y",0,.T.)

--
Tico Support S. A.
Tel. (506)8772-6170

Miguel A.

unread,
Jan 19, 2015, 1:13:16 PM1/19/15
to publice...@googlegroups.com
Lo más seguro quitar los espacios en blanco y los caracteres especiales, pero si no te es posible, inténtalo poniendo la ruta entre dobles comillas, por ejemplo:

DIRE1='"'+ALLTRIM(thisform.pageframe1.page1.TEXT1.VALUE)+'"'

Al principio y al final tienes que poner: comilla simple ' + comilla doble  "+ comilla simple ', o sea:  '"' las almenas de un castillo. Espero que funcione,

Saludos,

Miguel A.

Ultraton500

unread,
Jan 19, 2015, 1:39:32 PM1/19/15
to publice...@googlegroups.com
Hola Hernan, hola Miguel, gracias por colaborar conmigo.
Probé ambas recomendaciones pero no pude hacer que funcione. Me parece que no va a quedar otra que quitar el espacio del nombre del directorio.
Gracias de todas formas.

Saludos cordiales,
Javier.

HernanCano

unread,
Jan 19, 2015, 1:42:21 PM1/19/15
to publice...@googlegroups.com
Amigo "ultra":

El comando DOS que intentas ejecutar debes ejecutarlo con los nomrbe de directorio entre comillas DOBLES.
Por lo tanto cuando le pusiste comillas simples, debiste pensar en comillas dobles.

Lo que debes hacer es cambiar las comillas dobles de la cadena VFP que quieres armar a csimples o a corchetes. 

Tu solución puede ir más o menos así:

oShell.RUN('7za e &gcArchivo -o"&lcRutaActual" -aoa -y',0,.T.)  && debería funcionar, pero no lo heprobado

En lo personal prefiero no usar la macro & y hacer algo como lo que te indica Miguel:

oShell.RUN( ' 7za e ' +gcArchivo -o"' +lcRutaActual+ '" -aoa -y' ,0,.T.)

Las comillas dobles van sombreadas en azul.
De acuerdo a la sintaxis que muestras, las comillas dobles tiene un espacio sólo después de las comillas que hay después RutaActual, justo antes del parámetro -aoa.

Ultraton500

unread,
Jan 19, 2015, 3:27:25 PM1/19/15
to publice...@googlegroups.com
Hola Hernan, gracias por ayudarme una vez mas.
Ya había probado la primer sugerencia (con las comillas dobles) pero tampoco funcionó.
Probé tu segunda sugerencia (sin la macro) pero 7zip no lo intrepreta como una ruta sino como un nombre y por lo tanto crea un directorio con ese nombre con los archivos extraídos dentro. Esto no es lo que busco pero igual puede servirme.
Por las dudas probé con corchetes pero no pude hacer que interprete la ruta de destino.
Gracias nuevamente por tu colaboración

Saludos cordiales,
Javier.

Hernan Serrano

unread,
Jan 19, 2015, 4:04:38 PM1/19/15
to publice...@googlegroups.com
Mira este ejemplo. Asi lo utilizo yo con el Winrar y me funciona de maravilla.
lSenten = 'winrar.exe a -ep1 -dh "'+lAtoFile+'"'+' "'+lBaseDatos+'" -m5 -r -ibck '
Donde lAtoFile es el nombre del Archivo.
Y lBaseDatos, es la ruta de la Base de Datos que Inclusive puede estar en Archivos de Programa\Algo.


Ultraton500

unread,
Jan 19, 2015, 5:04:36 PM1/19/15
to publice...@googlegroups.com
Agregué las comillas dobles y simples como en tu ejemplo de WinRAR y ahora si me funcionó.
Me puse a comparar y es lo que me había indicado Hernan Cano pero como la línea que él escribió me daba error al compilar la quise acomodar y se ve que la modifiqué mal. También creo que Miguel se refería a lo mismo.
Pero bueno, problema resuelto.
Les agradezco a los tres por ayudarme.

Saludos cordiales,
Javier.

Staff de Desarrollos EfiMax

unread,
Jan 19, 2015, 5:22:50 PM1/19/15
to publice...@googlegroups.com

Trata usando la ruta corta de las carpetas usa esta función basada en un ejemplo de Luis Maria.

 

 

 

LPARAMETERS RutaOriginal

fso = CREATEOBJECT("Scripting.FileSystemObject")

Carpeta = fso.GetFolder(RutaOriginal)

RETURN Carpeta .ShortPath

RELEASE fso

 

 

suerte.

 

 

 

____________________________________

Carlos Omar Figueroa López

Ingeniero Industrial y de Sistemas

http://www.efimax.com.mx

Ultraton500

unread,
Jan 19, 2015, 10:14:07 PM1/19/15
to publice...@googlegroups.com
Hola Efimax, la función no parece funcionar del todo bien.

Probé con el directorio "C:\My Projects\" y funciona bien, me devuelve la ruta "C:\MYPROJ~1".
Probé con el directorio "C:\My Projects1\" y me devuelve el error "OLE error code 0x800a004c: Unknown COM status code."
Probé con el directorio "C:\MyProjects\" y me devuelve el error "OLE error code 0x800a004c: Unknown COM status code."
Probé con el directorio "C:\SISTEMA\COTIZADOR_VENDEDOR\" y me devuelve el error "OLE error code 0x800a004c: Unknown COM status code."

De todas formas agradezco tu aporte.

Saludos cordiales,
Javier.

HernanCano

unread,
Jan 19, 2015, 11:56:44 PM1/19/15
to publice...@googlegroups.com
Hola Ultraton: La función de Efimax sí parece funcionar bien.

Primero: creé el directorio "C:\My Projects1\". Los demás de tu ejemplo no existen en mi sistema.

Probé con el directorio "C:\My Projects\" y me devuelve el mismo error que a vos (aclaro: no existe).
Probé con el directorio "C:\My Projects1\" y funciona bien, me devuelve la ruta "C:\MYPROJ~1" (aclaro:existe).
Probé con el directorio "C:\MyProjects\" y me devuelve el mismo error (aclaro: no existe).
Probé con el directorio "C:\SISTEMA\COTIZADOR_VENDEDOR\" y me devuelve el mismo error (aclaro: no existe).

Ultraton500

unread,
Jan 20, 2015, 12:45:10 AM1/20/15
to publice...@googlegroups.com
Hola Hernan... claro!! me daba error con los directorios que no existen. Pensé que la función obtenía una ruta abreviada partiendo solamente de una cadena.
No soy muy brillante que digamos y a esta altura de la noche empeoro.
Muchas gracias por la aclaración.

Saludos cordiales,
Javier.

me hice la idea de que 

HernanCano

unread,
Jan 20, 2015, 8:54:07 PM1/20/15
to publice...@googlegroups.com
Si los dir no existen, no es posible dar alguna respuesta, pues si tuvieras los sgtes dir:

D\:\NOMINA_QUINCENAL_PRINCIPAL
D\:\NOMINA_QUINCENAL_SEDE_PRINCIPAL
D\:\NOMINA_QUINCENAL_CENTRO
D\:\NOMINA_QUINCENAL_INSTALADA

El código mostrado podría darnos algo como:

D\:\NOMINA~3
D\:\NOMINA~1
D\:\NOMINA~2
D\:\NOMINA~4

Pero si los dir no existen, ¿cómo saber si es ~1 ó ~2 ó ~3?

Fidel Charny

unread,
Jan 21, 2015, 6:57:32 AM1/21/15
to publice...@googlegroups.com
Para evitar este problema, se puede reformar la función como sigue:
PROCEDURE get_ShortPath
LPARAMETERS tcRutaOriginal
TRY
    LOCAL loFso
as Object , loFolder as Object,;
    lcShortPath
, loEx as Exception
    lcShortPath
= null
    lofso
= CREATEOBJECT("Scripting.FileSystemObject")
    IF loFso
.FolderExists(tcRutaOriginal)
        lofolder
=loFso.GetFolder(tcRutaOriginal)
        lcShortPath
= loFolder.ShortPath
    ENDIF
CATCH TO loex
   
* tratamiento de errores
FINALLY
    loFolder
=null
    lofso
=null
ENDTRY

RETURN lcShortPath
lcRutalarga = [c:\Archivos de programa\InstallShield Installation Information\]
lcRutaCorta = get_ShortPath(lcRutaLarga)
IF NOT ISNULL(lcRutaCorta)
          * Procedimiento
ENDIF

Ultraton500

unread,
Jan 21, 2015, 1:23:29 PM1/21/15
to publice...@googlegroups.com
Así es Hernan, ahora que estoy bien descansado se entiende clarito. La verdad que esta función es interesante, puede llegar a ser muy últil.

Saludos,
Javier.


El martes, 20 de enero de 2015, 22:54:07 (UTC-3), HernanCano escribió:

Ultraton500

unread,
Jan 21, 2015, 1:24:44 PM1/21/15
to publice...@googlegroups.com
Qué tal Fidel...
muchas gracias por la reforma, ya tomé nota.

Saludos,
Javier.
Reply all
Reply to author
Forward
0 new messages