Batch para copiar un archivo a varios destinos incluso en red

Soy nuevo aquí... Quisiera consulta si hay posibilidad de crear un batch que copie el o los archivo que quiera a varios destinos distintos, incluso a otras pc...

Ejem. Idea

Copy c:\archivo destino1 destino2 destinoenred3 destino4 destinoenred5 etc.

1 respuesta

Respuesta

Claro que hay posibilidades. Te copio un ejemplo que tendrías que ajustar a tus necesidades:

@echo off
set "archivo=c:\users\jhonatan\archivo a copiar.ppp"
set "destino1=c:\tmp"
set "destino2=c:\carpeta de prueba"
set "destino3=d:\copia de seguridad"
set "destino4=\\192.168.1.33\varios"
set "destino5=\\pc de luis\tmp"
Copy "%archivo%" "%destino1%"
Copy "%archivo%" "%destino2%"
Copy "%archivo%" "%destino3%"
Copy "%archivo%" "%destino4%"
Copy "%archivo%" "%destino5%"

También podrías pasar al bat, como parámetros, el nombre del archivo y los destinos. Y alguna combinación de la dos cosas. Esto solo pretende servir para abrirte un camino. Ya nos cuentas si te sirve o no.

Muchas Gracias por tu pronta respuesta gggirald ... es muy buena tu propuesta... Gracias a eso salio este pequeño pero util batch... en donde ingreso el nombre de la carpeta donde se encuentran los archivos incluso directorios que quiero copiar, luego en un archivo (destinos.txt) tengo todos los destinos a donde copiar... con el for recorro cada linea del archivo (destinos.txt), y voy copiandolo con el robocopy...  (los destinos los puse aparte porque asi luego actualizarlo sin modificar mi batch).

@echo off
:copiar
cls
set /p carp="escribe el nombre del directorio a copiar:"
for /f "tokens=1,2* delims=," %%i in (destinos.txt) do (robocopy %carp% %%i\c$\Users\nomusuario\Downloads\%carp%\ /E /LOG:%userprofile%\Downloads\infocopia.txt)
echo Continuar
pause>nul
goto copiar

funciona excelente... solo me queda una duda...

en la opc. del robocopy... /LOG:%userprofile%\Downloads\infocopia.txt ... estoy guardando un registro de lo copiado pero ya que es un bucle.. sobreescribe todas las acciones... y al final infocopia.txt termina con la informacion de la ultima copia realizada y no de toda la copia realizada...

Como podria hacer que guarde la informacion de toda la copia realizada en el mismo archivo (infocopia.txt) sin alarg mucho el batch...

....

Te comento lo que pasa es que usando el robocopy.... al correr el batch, ingreso la carpeta... busca los destinos... inicia las copias... bonito hasta ahi... pero empieza a cargar bastante informacion en la pantalla del DOS y no quiero que aparesca mucha info en pantalla... con /LOG:(ruta) evito que cargue la pantalla y guarde la info en un texto.. el cual superviso luego...  (aunque me carga un mensaje indicando que a sido copiado o guardado ...) ....

Si fuera posible que me indique solamente algo asi como "archivo copiado con exito" y si no hay contacto con el destino... "archivo no copiado" ... pero que continue copiando y que me guarde la info en el texto para supervisar luego las copias realizadas...

....lo estoy pensando..  si tienes alguna idea me avisas porfa...

Gracias de antemano...

Es un poco sorprendente tu caso. La consulta original daba una idea de ser realmente nuevo, no solo aquí, como ya decías sino tal vez también en el uso de los bat. Mi respuesta iba enfocada en ese sentido.

Luego dices que mi propuesta/respuesta es muy buena y que de ella ha salido el bat que aportas, con un nivel de complicación bastante mayor que el esperado y, sobre todo, con un desarrollo que no tiene nada que ver con esa propuesta.

Por cierto que no entiendo porque el TOKENS del FOR contempla la carga de dos variables (que serían %%i y %%j) si luego solo se utiliza una. Claro que habría que ver el formato del archivo DESTINOS.TXT. Tal vez originalmente incorporaba el origen/archivo y el destino para cada origen/archivo (separados por comas) y luego hubo un cambio de criterio al pedir por consola el nombre del archivo.

Pero bueno, vayamos a lo que importa. Tengo dos sugerencias:

1. Respecto al LOG te sugiero que no utilices el LOG del ROBOCOPY y que el comando quede así:

robocopy %carp% %%i\c$\Users\nomusuario\Downloads\%carp%\ /E>>%userprofile%\Downloads\infocopia.txt

Esto debería hacer que cada ejecución del ROBOCOPY se añada a lo ya existente.

2. Si prefieres que solo se registre si la copia fue bien o mal podrías probar a usar esta variante de tu bat:

@echo off
:Copiar
Cls
set /p carp="escribe el nombre del directorio a copiar:"
for /f "tokens=1 delims=" %%i in (destinos.txt) do call :copy "%%i"
echo Continuar
pause>nul
goto copiar
:copy
robocopy %carp% %~1\c$\Users\nomusuario\Downloads\%carp%\ /E /R:1 /W:5>nul
if errorlevel 4 echo Error en la copia de %carp% a %1\c$\Users\nomusuario\Downloads\%carp%\>>%userprofile%\Downloads\infocopia.txt&goto :eof
if errorlevel 1 echo Copia correcta de %carp% a %1\c$\Users\nomusuario\Downloads\%carp%\>>%userprofile%\Downloads\infocopia.txt&goto :eof
if errorlevel 0 echo Error en la copia de %carp% a %1\c$\Users\nomusuario\Downloads\%carp%\>>%userprofile%\Downloads\infocopia.txt&goto :eof

Debo advertir que supongo que el "nomusuario" que figura en tus comandos  tiene un valor concreto y que el formato de origen y destino de la copia, tal como lo representas es asumible por el ROBOCOPY (para los destinos de red no le veo demasiado problema a la aparición de "c$" en el comando pero para destinos que no sean de red no sé como lo manejará). Pero, puesto que dices que "funciona excelente" espero que siga haciéndolo.

Se supone que este bat escribirá en el archivo %userprofile%\Downloads\infocopia.txt los mensajes correspondientes indicando como ha ido cada una de las copias.

Debo reconocer que no soy usuario habitual de ROBOCOPY y me he basado en la información de la página https://norfipc.com/comandos/como-usar-comando-robocopy-ejemplos.html

Bueno, ya me contarás si te ha servido de algo todo esto.

Perdón, la línea del ERRORLEVEL 0 debería ser así:

if errorlevel 0 echo No se ha copiado nada de %carp% a %1\c$\Users\nomusuario\Downloads\%carp%\>>%userprofile%\Downloads\infocopia.txt&goto :eof

¿Ya no te interesa este asunto?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas