Archivo de extensión .bat que me permita copiar archivos o subcarpetas a una ubicación especifica solocon arrastrar hacia el bat

Archivo de extensión .bat que me permita copiar archivos o subcarpetas a una ubicación especifica solo con arrastrar los elementos que necesito copiar a el archivo bat.

Tengo una inmesidad de archivos y carpetas por ordenar diariamente y es muy tedioso, seria mas facil si pudiera tener este archivo. Este sin importar que los elementos o las subcarpetas contengas espacios en sus nombres.

Archivo de extensión .bat que me permita copiar archivos o subcarpetas a una ubicación especifica solo con arrastrar los elementos que necesito copiar a el archivo bat.

Tengo una inmesidad de archivos y carpetas por ordenar diariamente y es muy tedioso, seria mas facil si pudiera tener este archivo. Este sin importar que los elementos o las subcarpetas contengas espacios en sus nombres.

1 respuesta

Respuesta
1

A ver si esto te vale:

@echo off
set carpdest=D:\Carpeta prueba
:bucle
if "%~1"=="" goto :fin
if exist "%~1\*.*" xcopy /D /S /Y /I /H "%~1\*.*" "%carpdest%\%~n1\*.*"&goto :mas
xcopy /D /S /Y /I /H "%~1" "%carpdest%\"
:Mas
Shift
goto :bucle
:Fin
Pause

En la variable carpdest tienes que poner la carpeta de destino de todas las copias. Uso el comando xcopy porque no estoy familiarizado con el robocopy pero supongo que se podría hacer también con este último.

Sale un mensaje de error " No se puede realizar una copia cíclica"

Cree la carpeta prueba copia

@echo off
set carpdest=E:\prueba copia
:bucle
if "%~1"=="" goto :fin
if exist "%~1\*.*" xcopy /D /S /Y /I /H "%~1\*.*" "%carpdest%\%~n1\*.*"&goto :mas
xcopy /D /S /Y /I /H "%~1" "%carpdest%\"
:Más
Shift
goto :bucle
:Fin
Pause

No me copia ningún archivo

Al parecer el archivo funciona si esta fuera del directorio. lo ensaye en el escritorio y si funciona.

pero lo archivos que necesito manipular se encuentran todos en un disco, hay es donde sale el error " No se puede realizar una copia cíclica"

Ese mensaje indica que se está intentando copiar un archivo o carpeta sobre sí mismo o sí misma. Que yo sepa eso no se puede hacer ni siquiera de forma manual, pero voy a ver si se me ocurre algo.

Muchas gracias por compartir su conocimiento.

De todas maneras si no hay solución, me sirve demasiado el archivo bat que me dio.

Pero si no es mucha molestia, quisiera que por favor me explicaras las líneas del archivo. Ya que estoy muy interesado en aprender.

Muchas Gracias

No sé muy bien que aspectos del bat necesitan explicación para ti. De modo que seguiré mi intuición a la hora de hacerlo. La instrucción más interesante de ese bat, desde mi punto de vista y porque considero que no es muy conocida es la instrucción "shift". Es muy útil cuando no se conoce el número de "parámetros" que se pasan al bat. Aunque antes voy a explicar a que llamo parámetros. A la hora de ejecutar un bat se le pueden pasar parámetros, separados por espacios. Desde dentro del bat los parámetros pasados se pueden manejar con las variables %0 (es el propio nombre del bat), %1 (el primer parámetro) y así sucesivamente hasta el %9 (creo). Pero en realidad se le pueden pasar más parámetros (imagino que el límite es la longitud permitida a una línea de comando de MSDOS) pero no tendrán, directa con las variables internas %1, %2,..., %9. La instrucción "shift" desplaza los parámetros "hacia la izquierda" de manera que después de ejecutarla una vez el antiguo primer parámetro se pierde, el que era el segundo pasa a ser el primero, y así sucesivamente.

Cuando se arrastran "cosas" a un bat, por ejemplo los nombres de archivos o carpetas, se le pasan como parámetros (poniéndolos entre comillas si tienen espacios en el nombre).

Por tanto el bucle del bat lo único que hace es ir tomando uno a uno cada nombre, siempre con la variable %1. Una vez tratado la instrucción shift hace que el siguiente nombre pase a esa variable (los demás siguen ahí, pero no nos interesan hasta la próxima vez). Si la variable %1 ya no contiene nada la instrucción

if "%~1"=="" goto :fin

termina el tratamiento. En realidad aquí aparece %~1, en vez de %1. Como se explica en la ayuda del comando FOR del MSDOS (a la que se puede acceder tecleando "for /?" en una ventana CMD), esta forma de invocar al parámetro %1 le quita las comillas si las tuviera.

El segundo "if":

if exist "%~1\*.*"

lo uso para distinguir las carpetas de los archivos porque la sintaxis de xcopy debe ser diferente.

Si necesitas alguna explicación más no dudes en pedírmela, pero concrétala un poco para evitar que te cuente cosas que ya conoces o me calle otras que te interesan.

¡Gracias! 

Muchas gracias, precisamente me ha explicado lo que me causaba confusion en los condicionales if, muchísimas gracias.

Es un maestro, bendiciones.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas