Creación de .bat que copie archivos

Buenos días y gracias por adelantado.

El .bat ya lo tengo creado. Entre otras muchas cosas, copia un archivito de una carpeta de un pendrive y lo copia en C. El caso es que mi duda es la siguiente. La línea que da problemas es esta:

copy "E:\ARCHIVOS\black.jpg" C:\Windows

Por lo que damos por sentado que el archivo está en un pendrive con la letra E:. Pero y si el pendrive se llama J:, por ejemplo? Hay alguna forma de hacer que se copie del pendrive, sea cual sea la letra que se le asigne?

Gracias muchachos!
No se si podrá lo que quieres pero suempre puedes hacer que le indiques la unidad y te la coja o sea escribe en pantalla
¿De que unidad quiere copiar los datos? escriba la letra de la unidad
Y entonces lo que te ponngan se lo pasas a una variable y se la añades

Vamos no sería muy dificil de hacer
@bikooo2 Eso lo había contemplado, pero para hacer eso lo dejo como está (básicamente en la guía pongo que el pendrive tiene que renombrarse a E: y explico como hacerlo).

A ver si hay suerte y alguien arroja algo de luz con el tema de las rutas relativas.
Lo que quieres es sencillo usando las variables de entorno del sistema y las del parametro del archivo .BAT

@ECHO OFF
SETLOCAL

REM ORIGEN contiene la letra de la unidad donde se ejecuta el archivo .BAT
SET ORIGEN=%~d0

REM DESTINO contiene la ruta de instalacion de WINDOWS
SET DESTINO=%WINDIR%

IF /I [%ORIGEN%]==[%DESTINO:~0.3%] (
   ECHO ERROR: Origen Destino son la misma unidad
   PAUSE > NUL
   GOTO _FIN
)

CLS
ECHO Copiando archivos...
COPY "%ORIGEN%\ARCHIVOS\black.jpg" "%DESTINO%"


:_FIN
ECHO.
ECHO Proceso de copia finalizado
ENDLOCAL
PAUSE > NUL
@jb_______
Me da error diciendo que "no puede encontrar la ruta especificada". De hecho, da por supuesto que lo quiero copiar desde C:, no de la letra del pendrive. :-S

De todos modos gracias por vuestro tiempo
Eso te sucede porque el script está ideado para que se ejecute desde el pendrive desde el cual quieres copiar los ficheros. La variable %~d0 lo que hace es devolver la letra de la unidad desde donde se ejecuta el script. Si lo ejecutas en C:, el resultado será C. Y claro, C:\ARCHIVOS\black.jpg no existe.

Mueve el script al pendrive y ejecutalo desde ahi.
@Golondrino Buscando por Internet he encontrado 2 scripts que te hacen eso sin problemas, los he probado y me hace la copia a la carpeta especificada, en mi caso C:\Recordings. Busca específicamente solo en las unidades extraíbles que tengas, o el tipo de unidad que especifiques según el valor que le des a drivetype.

0 = Unknown / No se conoce el tipo de unidad.
1 = No Root Directory / La unidad no tiene directorio raíz.
2 = Removable Disk / La unidad es un dispositivo de almacenamiento extraíble, como una unidad flash USB.
3 = Local Disk / La unidad es un disco fijo.
4 = Network Drive / La unidad es una unidad de red.
5 = Compact Disc / La unidad es un dispositivo de disco óptico, como un CD o DVD-ROM.
6 = RAM Disk / La unidad es un disco RAM.


for /f "skip=1" %%b IN ('wmic logicaldisk where drivetype^=2 get deviceid') DO xcopy %%b c:\Recordings /s


o también este otro

@echo off
Title The copy of all your connected external devices by Hackoo
Mode con cols=100 lines=20 & Color 9E
setlocal ENABLEDELAYEDEXPANSION
set TargetFolder=C:\Recordings
wmic LOGICALDISK where driveType=2 get deviceID > wmic.txt
for /f "skip=1" %%b IN ('type wmic.txt') DO (
XCopy %%b\* !TargetFolder!\ /dsicfy)
Del wmic.txt
pause
Ya lo he conseguido, guapis! Especialmente a @juananbow, que me dió la clave (dos veces)

Sois los mejores, muchas gracias!

Al final esta parte del .bat me ha quedado tal que así, por si le sirve a alguien:


SETLOCAL
SET ORIGEN=%~dp0
SET DESTINO=C:\Windows
)
CLS
COPY "%ORIGEN%\ARCHIVOS\black.jpg" "C:\Windows"
7 respuestas