Mover archivos pdf de una carpeta a otra

Ok... Tengo una carpeta de nombre enviados2008 y una tabla del mismo nombre. La tabla contiene los nombres de los archivos a mover de la carpeta enviados a enviados2008... Como le hago para que fox lea el registro de la tabla enviados2008, luego busque el ese nombre de archivo en la carpeta enviados, y cuando lo localize el archivo lo mueva a enviados2008... Así con todos los registros que contenga la tabla enviados2008

1 respuesta

Respuesta
1
Si, me parece que ahora si entendí. Primero que nada necesitas una instrucción para mover archivos, hay varias formas, puedes usar una clase o puedes usar un comando de MS-DOS, te muestro el ejemplo:
** Suponiendo que el campo que tiene el nombre del archivo se llama así, "Nombre"
oArc = CREATEOBJECT("Scripting.FileSystemObject")
SELECT Enviados2008
SCAN
    oArc.MoveFile("Enviados\" + ALLTRIM(Enviados2008.Nombre), "Enviados2008\")
Endscan
Si quisieras utilizar un comando de MS-DOS podrías poner algo así dentro del [SCAN]:
cCom = "RUN /N7 MOVE " + "Enviados\" + ALLTRIM(Enviados2008.Nombre) + " Enviados2008\"
SCAN
    cCom = "RUN /N7 MOVE " + "Enviados\" + ALLTRIM(Enviados2008.Nombre) + " Enviados2008\"
    &cCom
Endscan
En los ejemplos, las partes que dicen "enviados\" y "enviados2008"... me imagino que hace referencia a la ubicación de los directorios... pero y si los tengo almacenados en variables como lo pongo:
ej: envdir= "h:\enviados\"  a   Nenvdir "h:\enviados\enviados2008".....como los pongo
SCAN
cCom = "RUN /N7 MOVE " + &envdir + ALLTRIM(Enviados2008.Nombre) + &Nenvdir
&cCom
ENDSCAN
En le ejemplo del código MS-DOS yo metí toda la instrucción en una variable y después la ejecuté. Si tu quieres usar rutas que estén en variables solo tienes que formar la cadena correspondiente, mira el ejemplo:
cRutaAnt = "H:\Enviados\"
cRutaNue = "H:\Enviados2008\"
SCAN
    cCom = "RUN /N7 MOVE " + cRutaAnt + ALLTRIM(Enviados2008.Nombre) + " " + cRutaNue
    &cCom
ENDSCAN
O con la Clase sería así:
OArc.MoveFile(cRutaAnt + ALLTRIM(Enviados2008. Nombre), cRutaNue)
Con el código donde se usa la clase, me sale el siguiente error:
OLE error code 0x800a0035: Unknown COM status code
lo unico que le cambie fue oArc a EArc... no creo que tenga que ver vdd??
y con el código de ms-dos sale el siguiente error:
RUN|! command failed
¿Qué puede estar mal?
Eh vuelto a checar el código de ms-dos y se me había pasado lo de: +""+ ... se lo puese, pero ahora me genera este error:
Invalid path or File name
USE (Eruta_nombre)
SCAN
ECom = "RUN MOVE" + Edir + ALLTRIM(enviados2008.num_oficio)+""+ NEdir
&ECom
Endscan
¿Y apunta hacia la linea donde se encuentra el &ECom... que puede ser?
Saludos
Si, ese error es porque no encontró el archivo a mover, verifica que la ruta y nombre de los archivos sean correctos y que los éstos existan. Puedes usar una instrucción para prevenir esos errores, la función [FILE()] devuelve verdadero (.T.) Si cierto archivo existe, algo así sería:
cRutaAnt = "H:\Enviados\"
cRutaNue = "H:\Enviados2008\"
oArc = CREATEOBJECT("Scripting.FileSystemObject")
SELECT Enviados2008
SCAN
    IF FILE(cRutaAnt + ALLTRIM(Enviados2008.Nombre))
        oArc.MoveFile(cRutaAnt + ALLTRIM(Enviados2008.Nombre), cRutaNue)
    ELSE
        WAIT WINDOW "Archivo " + ALLTRIM(Enviados2008. Nombre) + " no encontrado." NOWAIT
    ENDIF
Endscan
Wait clear
De lo del comando MS-DOS, la verdad todavía no se porque manda ese error, pero con el ejemplo anterior debe de funcionar..
Suerte.
ok... lo probare a ver si sale... ¿solo por ultimo en el de ms-dos que hace el /N7?? eso que indica
Saludos
Si mira el problema que tienes con tu comando MS-DOS es que no estas considerando los espaciosen blanco, de esta forma debería de quedar:
USE (Eruta_nombre)
SCAN
    *ECom = "RUN MOVE" + Edir + ALLTRIM(enviados2008.num_oficio)+""+ NEdir  && Ve la diferencia
    ECom = "RUN MOVE " + Edir + ALLTRIM(enviados2008.num_oficio)+" "+ NEdir
    &ECom
Endscan
El "/N7" indica que se ejecuta el comando pero el programa sigue inmediatamente después de mandarlo a llamar, si no lo pones, el programa espera hasta que la instrucción MS-DOS termine su ejecución. El 7 indica que la ventana de MS-DOS empieza minimizada e inactiva, es decir, que no se pone al frente de la pantalla.
Ok... ya no manda ningún error... el único problema es que no copia ningún archivo a las carpetas creadas... creo que es por que al nombre de archivo a buscar abría que agregarle un ".pdf" .. ¿Toy en lo correcto?
Así es, debes de incluir el nombre del archivo completo, incluyendo la extensión.
Se lo agregue y aun así no copia los archivos... ¿qué puede estar mal?
Eruta_nombre= "H:\minutario\tablas\enviados2008.dbf"
Edir="H:\enviados\"
NEdir="H:\enviados\enviados2008\"
**MOVER ARCHIVOS**
EArc = CREATEOBJECT("Scripting.FileSystemObject")
USE (Eruta_nombre)
SCAN
IF FILE(Edir + ALLTRIM(enviados2008.num_oficio + ".pdf"))
EArc.MoveFile(Edir + ALLTRIM(enviados2008.num_oficio + ".pdf"), NEdir)
ELSE
WAIT WINDOW "Archivo " + ALLTRIM(enviados2008.num_oficio + ".pdf") + " no encontrado." NOWAIT
ENDIF
ENDSCAN
wait clear
Endif
Creo que tu problema esta en el [ALLTRIM], esta función debe encerrar solo al campo de la tabla y tu le estas incluyendo el ".pdf".
Tu tienes:
IF FILE(Edir + ALLTRIM(enviados2008.num_oficio + ".pdf"))
Y debería ser:
IF FILE(Edir + ALLTRIM(enviados2008.num_oficio) + ".pdf")
Checa todos los comandos en donde usas esta función porque me parece que tienen el mismo problema. Esa debe ser la solución.

Añade tu respuesta

Haz clic para o