Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: JRpropaganda en 28 Septiembre 2015, 17:10 pm



Título: Ayuda. Necesito Mover Automaticamente Archivos y Carpetas
Publicado por: JRpropaganda en 28 Septiembre 2015, 17:10 pm
Saludos programadores>
Tengo una necesidad algo especifica, veran:

Necesito MOVER automáticamente el contenido (archivos Y CARPETAS) de una ubicación a otra en la misma UNIDAD.

Como todos sabéis, cuando lo hacemos manualmente se hace INSTANTÁNEAMENTE, es decir solo se cambian sus apuntadores, pero cuando lo intento hacer con ROBOCOPY dicho comando Copia de un lugar a otro y luego borra el origen... no conviene! Es altamente impractico si lo que quiero mover mide gigas y gigas de tamano! >:(  y si lo intento con MOVE aunque si lo hace instantáneamente, solo mueve lo que hay (archivos) en tal carpeta pero no las subcarpetas!!!

Solicito si alguien conoce del tema POR FAVOR me ayude, he pasado demasiadas horas intentando sin exito. Quizas no conozco bien el potencial de dichos comandos, o hay mas comandos por ahi o un batch no me caeria mal.

Mientras les mando un buen café y una dona para que lo mediten a gusto.

JR Andrade


Título: Re: Ayuda. Necesito Mover Automaticamente Archivos y Carpetas
Publicado por: Eleкtro en 28 Septiembre 2015, 17:55 pm
Por algo se llama así, RoboCopy. :P Cuando utilizas el switch /Move, los archivos se eliminan despues de haber sido copiados.

Con el comando Move puedes mover tanto archivos como un árbol de directorio entero, pero es muy limitado (como todo en Batch), si la carpeta a mover tiene el atributo de System, el comando Move no será capaz de reconocer el directorio (e imagino que con el atributo Hidden pasará lo mismo), y no se si tendrá alguna otra limitación respecto a los atributos de los subdirectorios y demás.

Esto tal vez te lo pueda solucionar:
Código
  1. @Echo OFF
  2.  
  3. Set "sourceDir=Directorio de origen"
  4. Set "targetDir=Directorio de destino"
  5.  
  6. (Attrib -R -S -H /S /D "%sourceDir%")2>NUL
  7. (Attrib -R -S -H       "%targetDir%")2>NUL
  8.  
  9. Move "%sourceDir%" "%targetDir%"
  10.  
  11. Pause&Exit /B 0
(solo lo escribí, no lo probé.)

Pero no uses el limitado Batch, puedes recurrir a VisualBasicScript (como mínimo):
Código
  1. dim filesys, sourceDir, targetDir
  2. set filesys = CreateObject("Scripting.FileSystemObject")
  3.  
  4. sourceDir = "Directorio de origen"
  5. targetDir = "Directorio de destino"
  6.  
  7. If Not filesys.FolderExists(sourceDir) Then
  8.   Call MsgBox("El Directorio de origen no existe.")
  9.  
  10. ElseIf filesys.FolderExists(targetDir) Then
  11.   Call MsgBox("El Directorio de destino ya existe.")
  12.  
  13. Else
  14.   Call filesys.MoveFolder(sourceDir, targetDir)
  15.  
  16. End If

Ten en cuenta que el método FileSystemObject.MoveFolder() no puede mover un directorio si el directorio de destino ya existe, cómo explica la documentación oficial:
MoveFolder Method - MSDN (https://msdn.microsoft.com/en-us/library/465s5y8s%28v=vs.84%29.aspx)

Saludos