Copiar archivos en carpetas definidas entre USB y PC

Estimados amigos del foro nuevamente ante ustedes, en esta ocasión me gustaría saber como puedo lograr copiar archivos entre la PC y el USB por ejemplo en la PC voy a colocar una carpeta llamada AlUSB y en la USB voy a poner una carpeta llamad DelPC (esta se debe crear en la USB automáticamente con el código, en caso de no existir)

Así mismo habrá en la PC una Carpeta llamada DelUSB y en la USB una carpeta llamada AlPC

Serian cuatro archivos bat, dos en el computador DelUSB y AlUSB y dos en la USB DelPC AlPC

De tal modo que si quiero enviar o recibir lo puedo hacer desde cualquiera de las partes. Por ejemplo pongo un código que no se si he puesto todo bien, solo quiero ejecutarlo cuando me confirmen si esta bien pues no quiero cometer un error de ejecución.

Este archivo debe estar en la USB

@echo off
Title Copia archivos usb
: Menu
if not exist E:\ (goto menu)
MD prueba
xcopy E:\AlPC\*.*
CLS
xcopy G:\AlPC\*.*
CLS
xcopy H:\AlPC\*.*
CLS
xcopy I:\AlPC\*.*
CLS
exit

Salvo su mejor criterio, espero que lo planteado sea lo mejor para ejecutar esta bat. Todo lo que contenga las carpetas se copian según el lado al que se desee enviar o recibir

1 Respuesta

Respuesta
1

No entiendo muy bien lo que pretendes, pero entre las líneas 3 y 4 tienes un bucle. ¿Intentas qué el bat se quede en el bucle hasta que introduzcas el USB y se reconozca como unidad E:? Eso sí que funcionaría si se dan esas dos condiciones.

Intuyo que asumes que tienes unidades USB que pueden ser reconocidas como unidades E:, G:, H: e I: pero imagino que tendrías que montar ese mismo bucle para todas ellas a no ser que utilices la primera como "interruptor". No olvides que según la configuración de la PC esas unidades pueden ser también discos duros o lectores ópticos (CD/DVD) y otros dispositivos conectados vía USB. Lo que sí aclaras es que de los cuatro bat de los que hablas, el que presentas sería el DelUSB.bat de la PC.

Pero luego, una vez introducido el USB crearía una subcarpeta "prueba" en la carpeta donde esté ese BAT (en la PC) y copiaría en ella el contenido de la carpeta AlPC de esas supuestas unidades de USB (en lugar de hacerlo en la carpeta "DelUSB" como decías pero supongo que esto es porque se trata de una prueba).

¿Quieres añadir a la carpeta DelUSB de la PC todos los archivos y subcarpetas de todos los USB's conectados en esas cuatro unidades y solo esos? ¿Qué pasa con otros USB's que puedas tener y no estén conectados en ese momento? ¿Qué pasará con los archivos repetidos (tendrías que contemplar en el XCOPY la posibilidad de reescribir sin preguntar)?

Gracias por responder en este nuevo tema.

La situación es así: si conecto la USB al computador, El programa reconozca la unida en la que esté el USB.

Si la USB no tiene las 2 Carpetas 1) DelPC  2) AlPC creadas,  entonces que las cree según el archivo que se ejecute.

bat en la USB:

Si las tiene creadas y ejecuto el desde el USB CopyDelPC.bat  entonces se copian en la carpeta  DelPC  (que esta en la USB)  los archivos que están en la Carpeta AlUSB (esta carpeta esta en la PC).

Desde el USB ejecuto el CopyAlPC.bat  entonces se copian en la carpeta  DelUSB  (que esta en la PC)  los archivos que están en la Carpeta AlPC (esta carpeta esta en la USB).

Así mismo para las 2 otras. en la dirección contraria

Claro esta que debo colocar los archivos o subcarpetas que deseo que se transfieran, en las carpetas correspondientes, en el PC o en el USB

El código que había puesto arriba es uno tomado de la red pero no me daba seguridad de que este bien.

Mi versión: conectas la USB a la computadora. Esta la detecta (supongamos que como unidad G:) y te saca un mensaje pidiendo que elijas lo que quieres hacer.

Eliges ejecutar DelPC.bat (que está en la USB):

Si existe G:\DelPC se ejecuta un XCOPY de los archivos de C:\AlUSB a G:\DelPC y finaliza. Si no existe la crea y finaliza.

Eliges ejecutar AlPC.bat (que está en la USB):

Si existe G:\AlPC se ejecuta un XCOPY de sus archivos a C:\DelUSB y finaliza. Si no existe la crea y finaliza.

Eliges no hacer nada en la USB y ejecutas C:\DelUSB.bat:

Si existe G:\AlPC se ejecuta un XCOPY de sus archivos a C:\DelUSB y finaliza. Si no existe la crea y finaliza.

Eliges no hacer nada en la USB y ejecutas C:\AlUSB.bat:

Si existe G:\DelPC se ejecuta un XCOPY de los archivos de C:\AlUSB a G:\DelPC y finaliza. Si no existe la crea y finaliza.

Salvo el cierto trabalenguas, no parece tener más complicación que la ubicación concreta de las carpetas y la determinación de la unidad asignada a la USB.

Por ejemplo el DelPC.bat con detección automática de unidad (suponiendo que la primera unidad "libre" es la F:) podría ser algo como:

@echo off
Setlocal EnableDelayedExpansion
:Inicio
for %%a in (F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set usb=%%a
if exist !usb!:\ goto :seguir
)
Echo Esperando a que se reconozca la USB
goto :inicio
:seguir
xcopy /y c:\AlUSB\*.* !usb!:\DelPC

Gracias por lo que mencionas parecería que con un solo bat cualquier lugar donde la ubique funcionaria sea en la PC o en el USB y que allí me da a escoger de donde a donde pasar la información, no se si comprendo bien así.

Pero tanto ubicándolo en la PC o en la USB me genera este resultado, que ya lleva varios minutos y no termina:

Si fuese por un carácter del código que hay que separar, ¿cuál sería para que funciones?

Seguramente se podría hacer un único bat con un menú. Algo como esto:

@echo off
Setlocal EnableDelayedExpansion
Cls
Echo.
Echo.
Echo Elige una opci¢n:
Echo 1. De PC a USB
Echo 2. De USB a PC
Echo.
set /p opc=      Opci¢n elegida:
:Inicio
for %%a in (F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set usb=%%a
if exist !usb!:\ goto :seguir
)
Echo Esperando a que se reconozca la USB
goto :inicio
:seguir
if "%opc%" == "1" (xcopy /y c:\AlUSB\*.* !usb!:\DelPC)
if "%opc%" == "2" (xcopy /y !usb!:\AlPC\*.* c:\DelUSB)

pero no era eso lo que quería decirte. Era solo un intento de contrastar si te había entendido bien. El mensaje que te sale solo se explica si no ha reconocido la USB o si la primera letra que explora es superior a la letra asignada. Supongo que eso es lo más probable. Si le puede asignar la D:, o la E: en la secuencia del FOR debe empezar por esa letra.

Efectivo! Copia perfecto

El único requisito según veo es que hay que tener las carpetas listas (No crea las carpetas) yo les puse por ejemplo así:

En la USB

CopyPC-USB\AlPC

CopyPC-USB\DelPC

En el PC:

CopyPC-USB\AlUSB

CopyPC-USB\DelUSB

Le coloque la ruta correcta y la E: que le faltaba

Todo lo que le ponga en la carpeta se copia al destino

je je sale de maravilla!,

Solo me gustaría saber si existe formas de hacer modos de botones, cosa que no he visto, pero no creo que yo lo he visto todo.

Me olvidé del detalle de crear la carpeta de destino si no existe. Pero, por supuesto, puede hacerse. En el caso de la USB bastaría sustituir el tratamiento de la opción correspondiente por:

if "%opc%" == "1" (
if not exist !usb!:\DelPC (md !usb!:\DelPC)
xcopy /y c:\AlUSB\*.* !usb!:\DelPC
)

Y algo análogo si se quisiera también crear en el PC, en caso de no existir.

Respecto a botones (y al uso de ratón en MSDOS) me temo que ya si que es un terreno "vedado" aunque es cierto que el EDIT (programa típico de MSDOS) sí que trata el ratón. Pero nunca me había planteado la cuestión de si se podría usar en un bat. He buscado en la red y parece que se podría hacer algo, pero exige instalar un programa que no forma parte del sistema operativo de microsoft, el "cmouse.exe" (tal vez haya otros similares). Más información en :

http://designal.netgoo.org/t113-comandocmouse-usar-mouse-en-batch 

He hecho algunas pruebas con el cmouse.exe y realmente es bastante sencillo. Por cierto que al ejemplo3.bat (que se incluye en el RAR de descarga del cmouse) le falta un CLS como primera instrucción y sin ella no funciona como se pretende.

Me he dado cuenta de que aquí se ha formado la filosofía del quién vino primero el "huevo o la gallina"

Según el apoyo que me has dado al código lo he dejado así:

rem Al USB
if "%opc%" == "1" (if not exist !usb!:\CopyPC-USB\AlPC (md !usb!:\CopyPC-USB\AlPC))
if "%opc%" == "1" (if not exist !usb!:\CopyPC-USB\DelPC (md !usb!:\CopyPC-USB\DelPC)
xcopy /y C:\Users\User\Documents\CopyPC-USB\AlUSB\*.* !usb!:\CopyPC-USB\DelPC)
rem Al PC
if "%opc%" == "2" (if not exist C:\Users\User\Documents\CopyPC-USB\AlUSB (md C:\Users\User\Documents\CopyPC-USB\AlUSB))
if "%opc%" == "2" (if not exist C:\Users\User\Documents\CopyPC-USB\DelUSB (md C:\Users\User\Documents\CopyPC-USB\DelUSB)
xcopy /y !usb!:\CopyPC-USB\AlPC\*.* C:\Users\User\Documents\CopyPC-USB\DelUSB)

Es decir alguna carpeta siempre debe existir primero, si aplico la opción 1, debe existir la carpeta AlUSB

si aplico la opción 2 debe existir la capeta AlPC, esa lógica me parece no tiene otra solución, salvo tu mejor criterio. 

Pues acumulo en una carpeta, lo que tengo intención de trasferir, luego ejecuto el bat

A ver que te parece jejeje, esto es simpático.....

A menos que se pueda codificar en bat las carpetas y archivos seleccionados para enviar al destino sea al USB o al PC. Que seria la solución para lo mencionado anteriormente.

No entiendo bien ninguno de tus últimos comentarios. Respecto al primero no sé si quieres decir que para que tenga sentido "racional" alguna de las dos opciones a elegir tiene que haber algo que se quiera copiar de un sitio a otro. Si fuera así estaría de acuerdo aunque el BAT no necesita esa "racionalidad". Siempre puedes crear las carpetas si no existen aunque pueda no tener mucho sentido. Pero intuyo que quieres decir otra cosa y no lo estoy entendiendo.

Y respecto al segundo no sé si me estás queriendo decir que tal vez haya una solución más ajustada a tu caso concreto. Pero si es así tampoco entiendo bien cuál es tu caso concreto. ¿Copiar una lista de archivos y/o carpetas? Si es así el problema es como facilitar al BAT la lista.

Claro, me explicare mejor... tengo el USB limpio le agrego el bat, no hay nada que enviar al PC en el PC esta la carpeta Documentos por defecto si esta limpio no hay nada que enviar al USB. Si en el USB tengo solo archivos, (según lo codificado en bat) no funciona, debe haber una carpeta llamada AlPC, y lo que arrastre a esta carpeta podre enviar al PC de lo contrario al ejecutar el bat no pasará nada.

según mi visión:

Con lo anterior mencionado por mi, a menos que exista un código inicial en bat que reconozca lo seleccionado sea archivos y/o carpetas que se transfieran al PC y pueda crear automáticamente las carpetas Del USB y AlUSB en el PC. En adelante, todo ya se habría configurado según el código hasta ahora hecho.

Si se requiere mejor aclaración, avísame.

Pero esa es una consecuencia del "diseño" de tu sistema de transferencia. Obviamente si no hay nada en la USB no hay nada que transferir. La creación por parte del BAT de las carpetas significaría, de alguna manera, el inicio del asunto o, al menos, la preparación de la USB para incorporarse al "sistema". Si incorporas al BAT otra forma de reconocer cosas a transferir ya estás cambiando el sistema, creo yo. De modo que lo que tendrías que plantearte es la adecuación de esta forma de trabajo a tus necesidades.

¡Gracias! Es cierto, quizá primero debo hacer que el bat, en cualquier lado que esté, primero cree las carpetas en las dos partes, en el PC y en el USB y luego ya solo es de transferir contenidos.

Gracias por todo el camino que me has dado para seguir adelante

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas