Mover carpeta/directorios en red o diferente unidad

543 views
Skip to first unread message

Zarlu

unread,
Mar 29, 2020, 2:31:59 PM3/29/20
to Comunidad de Visual Foxpro en Español
Buenas tardes a todos!

A ver si alguien me puede dar luz sobre el tema.

Quiero mover por código carpetas a un diferente directorio en el servidor
(Ya consideré copiar y luego borrar el origen, pero insisto en mover)

He probado de diferentes maneras sin éxito.
Algo así quiero hacer:
lcOrig="\\Servercontpaqi\digital\815pe-ap"
lcDest="\\Servercontpaqi\archivo\pabierto\815pe-ap"

No creo sean cuestiones de permiso porque manualmente se pueden mover las capetas, crear carpetas y archivos

Si la unidad es la misma funciona:
lcOrig="C:\movera\mover-a"
lcDest="C:\movido\mover-a"

Si el directorio en el servidor es el mismo funciona:
lcOrig="\\Servercontpaqi\digital\815pe-ap"
lcDest="\\Servercontpaqi\digital\Digital APEN\815pe-ap"

Si la unidad es diferente no funciona
lcOrig="C:\movera\mover-a"
lcDest="F:\movido\mover-a"

Si el directorio en el servidor es diferente no funciona:
lcOrig="\\Servercontpaqi\digital\815pe-ap"
lcDest="\\Servercontpaqi\archivo\pabierto\815pe-ap"

Aquí les dejo mi código con diferentes comandos usados
VFP9 W7
****
Clear

lcOrig="C:\movera\mover-a"
lcDest="F:\movido\mover-a"
api_move(lcOrig,lcDest)
*-
lcOrig="C:\movera\mover-b"
lcDest="F:\movido\mover-b"
script_move(lcOrig,lcDest)
*-
lcOrig="C:\movera\mover-c"
lcDest="F:\movido\mover-c"
run_move(lcOrig,lcDest)
*-
lcOrig="C:\movera\mover-d"
lcDest="F:\movido\mover-d"
ws_move(lcOrig,lcDest)
*-

*****************************
*api movefile
FUNCTION api_move(lcOrig,lcDest)
    DECLARE SHORT MoveFile IN Win32API STRING, STRING
    =Movefile(lcOrig,lcDest)
    Release MoveFile   
ENDFUNC
   
*Scripting.FileSystemObject
FUNCTION script_move(lcOrig,lcDest)
    oScript = CREATEOBJECT("Scripting.FileSystemObject")
    oScript.MoveFolder(lcOrig,lcDest)
    RELEASE oScript
EndFunc   

*run move
FUNCTION run_move(lcOrig,lcDest)
lcMove="!/7 MOVE"+" "+lcOrig+" "+lcDest
&lcMove

*WScript.Shell
FUNCTION ws_move(lcOrig,lcDest)
lcMove="MOVE"+" "+lcOrig+" "+lcDest
*LOCAL loShell  AS WScript.Shell
loShell = CREATEOBJECT("WScript.Shell")
lcArchivo = GetEnv("TEMP") + "" + Sys(2015) + ".bat"
StrToFile(lcMove, lcArchivo)
loShell.Run(lcArchivo, 0, 3)
RELEASE loShell

Gracias
zarlu
Chetumal, Quintana Roo, México



ggcagnola gmail

unread,
Mar 30, 2020, 8:40:30 AM3/30/20
to publice...@googlegroups.com

el move es un copy y un delete, siempre...

copy file (lcOrig) to (lcDest)

if file(lcOrig)

    delete file (lcOrig)

endif

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/a2e7935a-9e5f-4ea1-ae38-a57ee4ffb66d%40googlegroups.com.

HernanCano

unread,
Mar 30, 2020, 9:41:18 AM3/30/20
to Comunidad de Visual Foxpro en Español
Zarlu:
¿será que el programa que estás ejecutando para mover está ubicado dentro del dir que quieres mover?
Es que como no has dicho cuál es el mensaje de error, es difícil darte indicaciones......

Zarlu

unread,
Mar 30, 2020, 11:28:06 AM3/30/20
to Comunidad de Visual Foxpro en Español
Buenos días ggcagnola gmail!

Gracias por tu apoyo

No precisamente, hay comando para copiar y otros para mover.
Y por cierto me refiero a folders no a files.
Como dije en mi mensaje... como alternativa ya consideré copiar y luego borrar el origen, pero espero se pueda hacer de una manera limpia con los comandos específicos.

Zarlu

unread,
Mar 30, 2020, 11:33:35 AM3/30/20
to Comunidad de Visual Foxpro en Español
Qué tal HernanCano Buenos días!

- El programa/código está en una ubicación diferente de las carpetas a mover.
- No hay mensaje de error. Simplemente no los mueve. Ambos directorios origen/destino existen y tienen los permisos necesarios.

ggcagnola gmail

unread,
Mar 30, 2020, 11:48:23 AM3/30/20
to publice...@googlegroups.com

si son capertas usás mkdir y rmdir

todo dentro del fox

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Zarlu

unread,
Mar 30, 2020, 12:02:04 PM3/30/20
to Comunidad de Visual Foxpro en Español
ggcagnola gmail!

Los comandos...
MDIR.-Creates a new directory or subdirectory on disk.

RMDIR.- Removes a directory or folder from disk.


No quiero crear directorios, ni removerlos.


En mi mensaje inicial subo varias funciones para mover carpetas. Y funcionan...pero cuando cambia la unidad o path fallan. Esto es lo que quiero descifrar.


Agradezco tus sugerencias, dado el caso habría que irse por el copiar y luego borrar origen. Pero insisto en que considero que debe poderse de manera limpia con los comandos que ya existen para esas tareas.

Edwin Duran

unread,
Mar 30, 2020, 1:21:52 PM3/30/20
to Comunidad de Visual Foxpro en Español
Buenas Tardes

Prueba ejecutando el vfp como administrador

Zarlu

unread,
Mar 30, 2020, 2:26:47 PM3/30/20
to Comunidad de Visual Foxpro en Español
Que tal Edwin Duran!

Gracias por la sugerencia. Ya probé...Nada!!

Edwin Duran

unread,
Mar 30, 2020, 3:57:15 PM3/30/20
to Comunidad de Visual Foxpro en Español
La carpeta que esta en la red, que sistema operativo tiene?

Zarlu

unread,
Mar 30, 2020, 5:04:59 PM3/30/20
to Comunidad de Visual Foxpro en Español
Qué tal Edwin Duran!

El movimiento real de carpetas que pretendo están en un 8 pro. Origen y destino.
Pero si te fijas en mi mensaje inicial menciono que tampoco funciona entre c:\ y f:\ (f:\ es un disco externo conectado por usb)

si gustas (si gustan) hacer pruebas sólo creen las carpetas "movera"  (en C:) y "movido" (en alguna otra unidad)
Dentro de la carpeta "movera" creen las carpetas mover-a, mover-b, mover-c y mover-d

y adapten el código en
en lcOrig y lcDest

Gracias
zarlu
Chetumal, Quintana Roo

HernanCano

unread,
Mar 30, 2020, 10:11:19 PM3/30/20
to Comunidad de Visual Foxpro en Español
Zarlu:

Para cuando no funciona, considero que.....

Probablemente es por que estás usando el comando MoveFile de una forma que no es.

Nota que MoveFile significa "Mover Archivo", no "mover directorio".

Entonces la recomendación sería:

lcOrig="C:\movera\mover-a"
lcDest="F:\movido\mover-a"

lcOrig2 = addbs(lcOrig)+'*.*'
lcDest2 = addbs(lcDest)+'*.*'

DECLARE SHORT MoveFile IN Win32API STRING, STRING
=Movefile(lcOrig2,lcDest2)

Verifica y nos cuentas.

Gabriel Araya Garcia

unread,
Mar 31, 2020, 8:16:36 AM3/31/20
to publice...@googlegroups.com
La verdad es que para efectos de la operación que deseas realizar el "CREAR CARPETA" y "ELIMINAR CARPETA" se cumple el objetivo, mas aún si quien va a realizar dicha tarea es una sola persona tipo administrador. La cosa se complica si todos los usuarios efectuaran lo mismo.
Saludos
  
Gabriel Araya Garcia
GMI - Desarrollo de Sistemas Informáticos




--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

ggcagnola gmail

unread,
Mar 31, 2020, 9:13:21 AM3/31/20
to publice...@googlegroups.com

para que usar comandos fuera del fox?

si vas a mover carpetas, siempre es crearla en el destino y eliminarla en el origen!!!

repito: el mover es copiar y eliminar....

usás las herramientas del fox y es más rápido y más controlado

pero, como siempre, es un comentario lo mío

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Zarlu

unread,
Mar 31, 2020, 12:23:17 PM3/31/20
to Comunidad de Visual Foxpro en Español
Buenos días Gabriel Araya García!
Buenos días ggcagnola gmail!

Agradezco su apoyo y comentarios!

Copiar archivos uno por uno también cumpliría el objetivo.....y se vale.
Pero..porque no usar los recursos del sistema operativo (Apis)?? De hecho Fox se apoya en ellos.

Crear carpeta-copiar archivos-eliminar archivos/carpeta. Tres procesos.
Lo que pretendo es lograrlo con un sólo comando.

Sino lo encuentro, si me doy por vencido, tendré que hacerlo a mano con tres procesos
Si se encuentra el modo  se pueden simplificar tres procesos.

ggcagnola gmail

unread,
Mar 31, 2020, 12:25:32 PM3/31/20
to publice...@googlegroups.com

un solo comando para vos... internamente son tres!!!

create ua función que haga todo y la llamás.... una sola vez!!!

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Hendell Mora

unread,
Mar 31, 2020, 12:40:54 PM3/31/20
to publice...@googlegroups.com

Zarlu

unread,
Mar 31, 2020, 12:46:17 PM3/31/20
to Comunidad de Visual Foxpro en Español
Buenos días HernanCano!

MoveFile (al igual que todas las funciones contenidas en mi mensaje original mueven directorios, algunas también mueven archivos.)

La sintaxis para mover archivos con MoveFile sería:
lcOrig="C:\movera\mover-a\movido.txt"&&no acepta *.*
lcDest="C:\movido\movido.txt"&&puede ser un nombre distinto

DECLARE SHORT MoveFile IN Win32API STRING, STRING
=Movefile(lcOrig,lcDest)

De hecho para este comando ya encontré que no se puede mover directorios entre volúmenes diferentes:
"....La única advertencia es que la función MoveFile fallará en los movimientos del directorio cuando el destino esté en un volumen diferente..."
(Se menciona en el link referido)

Gracias
Sigo buscando e intentando con los otros comandos

Zarlu

unread,
Mar 31, 2020, 12:56:47 PM3/31/20
to Comunidad de Visual Foxpro en Español
ggcagnola gmail!

Alguna vez leí, en éste foro, a un gurú de Foxpro..."para que crear una función de algo que ya existe"

Te aseguro que cuando agote mis posibilidades al final aplicaré tres o más procesos para lograr lo deseado.

crear-copiar-eliminar es algo que desde un principio consideré como alternativa.

HernanCano

unread,
Mar 31, 2020, 1:00:06 PM3/31/20
to Comunidad de Visual Foxpro en Español
Zarlu:

>>> ... MoveFile (al igual que todas las funciones contenidas en mi mensaje original mueven directorios.... 

Lo que mencionas más adelante (en el mismo aporte) indica lo contrario.
Como programadores podemos hacer que muevan directorios, mediante una rutina (desarrollada por uno mismo) que tome archivo por archivo..... cierto?

HernanCano

unread,
Mar 31, 2020, 1:01:19 PM3/31/20
to Comunidad de Visual Foxpro en Español
¿Cuál es la aversión a usar comandos Fox/VFP/xBase?

Zarlu

unread,
Mar 31, 2020, 1:05:40 PM3/31/20
to Comunidad de Visual Foxpro en Español
Buenos días Hendell Mora!

Gracias por la ayuda!

Estoy buscando en hacerlo con un sólo comando (Como los que menciono en mi mensaje inicial)

Xcopy es copiar y luego entonces borrar el origen.
No lo he logrado con MoveFile y Scripting.FilesystemObject y los otros

El problema que se presenta, y por lo que noto es en todos, es que en volúmenes diferentes origen/destino no es posible.

HernanCano

unread,
Mar 31, 2020, 1:07:31 PM3/31/20
to Comunidad de Visual Foxpro en Español
¿Eres programador de Fox/VFP?

local M.lcOrig, M.lcDest
M
.lcOrig="C:\movera\mover-a"
M
.lcDest="F:\movido\mover-a"

do VFP_Move with M.lcOrig,M.lcDest


** API movefile
FUNCTION API_Move
(lcOrig,lcDest)

    DECLARE SHORT
MoveFile IN Win32API STRING, STRING
   
=Movefile(lcOrig,lcDest)
   
Release MoveFile  
ENDFUNC


** VFP MoveFiles
FUNCTION VFP_Move
(M.lcOrig,M.lcDest)

   
local M.lcOrig2, M.lcDest2, M.OldSafety
   
    M
.lcOrig2 = addbs(M.lcOrig)+'*.*'
    M
.lcDest2 = addbs(M.lcDest)+'*.*'
   
   
if !directory(M.lcDest)
       
MessageBox('Creando el directorio de destino')
       MD
(M.lcDest)   && Paso 1
    endif
 
 M
.OldSafety = set('safety')
 
set safety off
 
 
MessageBox('Copiando archivos al destino')
 copy files
(M.lcOrig2) to (M.lcDest2)   && Paso 2

 
MessageBox('Limpiando el origen')
 erase
(M.lcOrig2)    && Paso 3
 
set safety &OldSafety.
 RD
(M.lcOrig)
     
ENDFUNC

**



HernanCano

unread,
Mar 31, 2020, 1:07:39 PM3/31/20
to Comunidad de Visual Foxpro en Español
>>> ... pero espero se pueda hacer de una manera limpia con los comandos específicos....

¿Cumple?

HernanCano

unread,
Mar 31, 2020, 1:16:07 PM3/31/20
to Comunidad de Visual Foxpro en Español
Con ROBOCOPY se puede hacer lo que quieres.
Se usa de forma similar a XCOPY (es decir: es de DOS; y tiene unos argumentos que le dan la característica de mover).

Zarlu

unread,
Mar 31, 2020, 1:21:02 PM3/31/20
to Comunidad de Visual Foxpro en Español
 HernanCano!

No entendí esto:
>>> ... MoveFile (al igual que todas las funciones contenidas en mi mensaje original mueven directorios.... 
Lo que mencionas más adelante (en el mismo aporte) indica lo contrario.
Te respondo:
Como programadores podemos hacer que muevan directorios, mediante una rutina (desarrollada por uno mismo) que tome archivo por archivo..... cierto? SI
¿Cuál es la aversión a usar comandos Fox/VFP/xBase? Ninguna. Si se puede con una función que ya exista, y que incluya/simplifique los procesos requeridos, la tomaré, sino lo haré manual con lo que haya.

Si te fijas subí cuatro códigos, 4 funciones, para hacerlo. Nadie me ha dicho que entre volúmenes diferentes no es posible lograrlo con ninguna de las funciones que mencioné.
Me han dicho como hacerlo con crear-copiar-eliminar, opción que desde el principio menciono haber considerado.

HernanCano

unread,
Mar 31, 2020, 1:35:21 PM3/31/20
to Comunidad de Visual Foxpro en Español
Ya te pasé un código......

El martes, 31 de marzo de 2020, 12:21:02 (UTC-5), Zarlu escribió:
 HernanCano!
.....

Zarlu

unread,
Mar 31, 2020, 1:55:54 PM3/31/20
to Comunidad de Visual Foxpro en Español
HernanCano!

Con ROBOCOPY si se puede mover directorios completos entre volúmenes diferentes!!

VFP9 W 7

Quedó así: (notemos cuantas líneas!!)
lcOrig="C:\movera\mover-a"
lcDest="F:\movido\mover-a"&&puede cambiar el directorio destino
lcMove="!/7 ROBOCOPY"+" "+lcOrig+" "+lcDest+ " "+"/MOVE"
&lcMove

He ahí la diferencia entre crear-copiar-eliminar "manualmente"

Te agradezco.

HernanCano

unread,
Mar 31, 2020, 3:37:00 PM3/31/20
to Comunidad de Visual Foxpro en Español
Pero es externo a VFP y necesita ser ejecutado coin RUN !!!!!

¿No te diste cuenta???

Zarlu

unread,
Mar 31, 2020, 4:54:14 PM3/31/20
to Comunidad de Visual Foxpro en Español
HernanCano!

No tengo ningún inconveniente con eso!!
No se requiere instalar componente adicional de las que ya traen las pc.
Si observas en mi mensaje adicional hay dos ejemplos que usan RUN

Desde un principio dije.... "(Ya consideré copiar y luego borrar el origen, pero insisto en mover)"
Osease que si no encontraba la función que hiciera lo que yo quiero, como yo lo quiero, lo haría con los comandos "puros" de VFP.
No estoy peleado con el RUN ni con las apis.

Te aseguro que la solución que me ayudaste a encontrar le servirá a otros colegas.

zarlu
Chetumal, Quintana Roo



dptosis...@gmail.com

unread,
Aug 7, 2024, 4:32:47 PM8/7/24
to Comunidad de Visual Foxpro en Español
hen mi caso si era necesario utulizar el api con el move y si es siereto que es igual copiar y eliminar pero cuando no tienes especio en el disco y tienes 35,000 archivos de 2 gib cadauno  hacer una copia demora demasiado y es posible que el diso se llene y falle el procedimiento es mas limpio cuando el sisitema operativo se encarga de todo el proceso de mover los archivos 

José Antonio Peña Martínez

unread,
Aug 7, 2024, 10:40:48 PM8/7/24
to publice...@googlegroups.com
Bueno en la realidad "mover" carpetas o archivos no crea y elimina, sino que cambia la referencia a donde pertenece la carpeta o el archivo por eso parecería que es más rápido ...

Saludos!

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Desarrollo de Sistemas TecnoPro
José Antonio Peña

Saludos!

José Antonio Peña Martínez

unread,
Aug 7, 2024, 10:41:53 PM8/7/24
to publice...@googlegroups.com
Cuando es diferente el procedimiento? cuando las mueves a otra unidad alli si aplica el copiar y eliminar ... Saludos!

El mié, 7 ago 2024 a las 14:32, dptosis...@gmail.com (<dptosis...@gmail.com>) escribió:
--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages