Programar un bat para que copie de USB a PC

No se casi nada de programación y estoy aprendiendo poco a poco sobre la programación bat. Me gustaría saber como puedo copiar archivos de un USB a una carpeta que se cree automáticamente en la PC. Por ejemplo:
Ejecuto el bat a continuación inserto una memoria usb con el nombre ABC y tiene que pasar lo siguiente.

Se crea una carpeta automáticamente en la PC con el nombre de la usb (ABC) y copie automáticamente los archivos de dicha usb.

De igual manera si pongo otra usb se crea otra carpeta con el nombre de la usb y copie los archivos

Si es posible la carpeta que se crea este "oculta"

1 Respuesta

Respuesta
1

Necesitaría algunas aclaraciones sobre lo que solicitas:

1. Si quieres que el bat detecte cambios en las usb's presentes de forma "dinámica" tendrá que estar en ejecución permanente. Hasta donde he podido ver el Autoplay (que se ejecuta al insertar una nueva unidad usb) no permite la ejecución de un bat. Si es así tendrías que decidir cada cuánto tiempo quieres que se revise.

2. ¿Qué quieres que se haga cuando ya exista la copia, o, al menos, la carpeta con el nombre de alguna de las usb's presentes? ¿Y si ya existe alguno de los archivos a copiar en el path correspondiente?

3. ¿Dónde quieres ubicar la carpeta con el nombre de la unidad usb?

4. ¿Qué debe hacerse si una unidad usb montada no tiene nombre?

5. La copia de la unidad usb, ¿debe tener la misma estructura de carpetas que la usb copiada?

6. Lo que estás planteando, ¿no tiene que ver de alguna manera con copias "ilegales" o, al menos, no consentidas, del contenido de las usb's que se montan en un equipo? ¿Por qué, si no, quieres que la carpeta creada esté "oculta"?

Gracias por responder, intentaré ser los mas específico posible con mi solicitud. Recuerda, aún soy novato en programación.

  1. Quiero poder ejecutar el bat manualmente; una vez el bat este en ejecución permanente. Quiero que al insertar cualquier memoria usb copie todos los archivos; de modo tal que si detecta otra usb haga el mismo proceso (por lo que he podido averiguar se puede programar para que revise cada cierto tiempo que podria ser cada 1 min)
  2. Para no tener conflictos con carpetas con el mismo nombre quiero que cree carpetas con el nombre de la usb insertada, es decir si inserto una usb con nombre "ABC" el bat también cree una carpeta con ese nombre y copie todos sus archivos, si inserto otra memoria usb "DEF" haga el mismo proceso.
  3. La ruta destino D:/Nueva carpeta
  4. Si la USB montada no tiene nombre darle un nombre por defecto como "SinNombre", y si llegase a insetar alguna otra usb sin nombre podria darle un nombre como "SinNombre(1)" *En este punto no se si estoy pidiendo mucho o si es que se pueda lograr
  5. Si, debe tener la misma estructura de carpetas que la usb copiada
  6. Seré honesto contigo, de hecho tendria que ver con lo de no consentida. Trabajo en una pequeña empresa familiar y estamos empezando a sospechar que un trabajador y la secretaría está copiando información nuestra y se la están pasando a la competencia. En la maquina asignada a la secretaria no hay indicios de ello, por lo que me hace pensar que la puede tener en las usb's que siempre lleva. Oculta porque no quiero que por casualidad vea la carpeta creada por el bat y llegue a borrarla.
    Gracias de antemano
    PD: Podrías recomendarme un buen libro sobre programación en bat. Por ahora estoy leyendo  uno que encontré en internet "Manual de programación en Batch por Dhyablo"

Voy a creer que las cosas son como las cuentas, ¿por qué no?

Hay algunos problemillas que se me ocurren para que tu plan tenga éxito:

1. Aunque la carpeta sea oculta hay formas de ver las carpetas ocultas, a no ser que los usuarios normales tengan bastante limitadas las posibilidades de actuación. Y aún así...

2. De momento no se me ocurre como hacer que el bat "latente" no sea visible, es decir, que se ejecute sin que el usuario se entere de que se está ejecutando. Pero no descarto que pueda hacerse, o que haya otras formas de ejecución (como las "tareas programadas") que puedan conseguirlo.

3. Lo que te decía de las carpetas ya existentes tiene que ver, precisamente, con que si se copian todas las usb's y se vuelve a "montar" una que ya ha sido copiada hay que decidir que se hace. Además si quieres que los intentos se hagan cada minuto es muy probable que una usb ya copiada siga montada, y hay que decidir que se hace en ese caso.

4. Respecto a libros sobre programación en bat la verdad es que no puedo recomendarte ninguno. Yo creo que todos hemos ido aprendiendo a base de practicar y los fundamentos son sencillos y están en cualquier tutorial, aunque luego no sea tan sencillo hacer las cosas porque esta modalidad de programación tiene muchas "trampas", rigor sintáctico casi al nivel de "manías" y peculiaridades que dificultan algunas cosas pero que otros antes que nosotros han sabido esquivar. Si te puedo poner aquí algunas páginas que me han servido:

http://www.commandline.co.uk/
http://www.taringa.net/posts/linux/9566772/Scripts-BATCHs.html
http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html

Por último te voy a poner un primer intento de hacer algo de lo que pides para poder empezar a trabajar sobre algo concreto. Lo copias en un archivo, lo guardas con extensión bat y lo ejecutas como administrador. Para tener cierta capacidad de maniobra utiliza dos variables internas una para el tiempo de espera en segundos antes de revisar si hay una usb montada (tmpespera) y otra para la carpeta destino (carpdest). Te sugiero que hagas pruebas en cualquier ordenador para ver como funciona y qué cosas habría que cambiar/retocar/mejorar:

@echo off
Setlocal EnableDelayedExpansion
set tmpespera=15
set carpdest=D:\Nueva carpeta
> dskprttmp.txt echo list volume
:bucle
for /f "skip=8 tokens=3,4,6,*" %%a in ('diskpart /s dskprttmp.txt') do if %%c==Extra¡ble (
if not exist "%carpdest%\%%b\" md "%carpdest%\%%b\"&attrib +h +s /d /s "%carpdest%\%%b"
xcopy "%%a:\*.*" "%carpdest%\%%b\" /D /S /Y /I /H
)
Ping -n %tmpespera% localhost >nul
goto :bucle

Si tienes algún problema o necesitas alguna aclaración dímelo.

No sé si lo has probado, pero de la aparición de otra consulta en esta página, más o menos relacionada con esta, deduzco que o no la has probado o te parece que no te sirve. Si la has probado y tienes algún problema dímelo y veremos si se puede resolver.

Mientras tanto he hecho algún avance y he comprobado que con "tareas programadas" se puede conseguir que no se vea nada de la ejecución del bat (un poco retocado) y que funcione creo que de forma bastante parecida a lo que podrías necesitar.

Después de tanto tiempo debo deducir que has resuelto tu problema o has abandonado. En este último caso sería una pena, porque creo que había encontrado una solución razonable. En todo caso me ha parecido interesante y me ha dado ocasión de indagar en un campo que no había explorado gran cosa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas