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 de ikz0f7
1
1

ikz0f7, * Programación - C# - Visual Basic
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\"
** 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
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
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)
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?
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
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.
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
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.
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?

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
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.
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.
- Compartir respuesta
- Anónimo
ahora mismo
