Una pequeña ayuda por favor con un .bat

Cordial saludo a todos.
Estoy creando un pequeño ejecutable en .bat para un Windows 7, que me permita copiar el contenido de una carpeta con nombre variable, a otra carpeta con el nombre fijo Backup; para copiar sabiendo los nombres uso:

c:\xcopy CarpetaA Backup

esto copiará todo lo que halla en la carpetaA a la carpeta Backup, pero como la carpetaA no siempre se va a llamar asi, podría llamarse 123456 o documentos ..etc..
Mi pregunta es como hago para que en ese .bat lea la carpeta de nombre variable?..aclaro que dentro del directorio sólo van a estar esas 2 carpetas la de nombre variable y la Backup.

espero haberme explicado bien..y muchas gracias por su ayuda. [beer]

saludos
Mírate el parámetro /EXCLUDE
Creo que te servirá.
Cambias el nombre de la carpeta variable por %1 y luego tendrías que llamar el bat desde comandos indicando el nombre de la carpeta como parámetro:
@echo off
xcopy %1 backup


Luego si, por ejemplo, nombras al archivo como copiador.bat lo llamarías así:
copiador nombrecarpeta


Puede que necesites algún parámetro extra para el xcopy, puedes consultarlos en esta página: https://gigastur.es/backups-windows-xcopy
DS_impact escribió:Mírate el parámetro /EXCLUDE
Creo que te servirá.


Muchas gracias, no se si es lo que busco por que no tengo windows de donde estoy escribiendo para probarlo, pero he investigado un poco dicho parametro y tengo mis dudas.
Creo que no me he sabido explicar bien lo que quiero,,voy a poner un ejemplo:
Supongamos que tengo un directorio llamado marvicdigital en el partición D..osea:

D:\marvicdigital

ahora supongamos que dentro de esa carpeta voy a pegar una única carpeta con nombres aleatorios, por ahora sólo voy a poner esa carpeta allí, como va a tener nombres aleatorios entonces voy a poner "caulquiernombre" en el ejemplo:

D:\marvicdigital\cualquiernombre

Lo que deseo que haga el .bat es que sea capás de ingresar a esa carpeta con "cualquiernombre" y me copie todos los archivos que están dentro de ella a otra carpeta llamada Backup, quedando dentro de la carpeta backup los archivos, asi:

D:\backup

texto1.txt
cancion.mp3
foto.jpg
ejecutable.exe
dtos.dat

He pensado que para no liarme mucho poner backup en la raiz de D..no se si me he sabido explicar bien, espero me comprendan que no tengo mucha experiencia en esto.. XD ..yo imaginaba algo como:

xcopy %*/*.* D:\backup

Pero no sirvió.. [carcajad]

Gracias y perdón por liarme tanto.

Saludos [bye]

PD:
@lecquio ya había escrito toda esta cosa antes de leerte, voy a probar ahora más tarde y comento..mil gracias.
Más fácil:
xcopy "*.*" "d:\backup\*.*" /d/e/y/c/i/h

Guardas el bat y lo ejecutas desde la carpeta que tiene el contenido que quieres copiar y listo.
lecquio escribió:Más fácil:
xcopy "*.*" "d:\backup\*.*" /d/e/y/c/i/h

Guardas el bat y lo ejecutas desde la carpeta que tiene el contenido que quieres copiar y listo.


Gracias por responder tan rápido amigo, esto estaría bien si no fuera por que el .bat está en otra parte y por que se supone que el .bat no conoce el nombre de la carpeta que tiene los archivos a copiar, y esta carpeta se elimina luego del proceso de copiado y respaldo. Recuedo que sólo va a copiar los archivos contenidos dentro de esa carpeta. [buenazo]

Gracias.

Saludos
Prueba esto.

Supongamos que tienes el directorio D:\marvicdigital, en dicho directorio se crea cualquier directorio con nombre aleatorio, por ejemplo, D:\marvicdigital\blablabla y/o D:\marvicdigital\blobloblo , colocas el archivo bat dentro del directorio D:\marvicdigital al ejecutarlo, entrará en cada directorio que encuentre sea cual sea su nombre y copiará los archivos que contengan al directorio "D:\backup\" . no entrará en subdirectorios, por ejemplo, D:\marvicdigital\blablabla\blandiblu

/Y indica que no pide confirmación en el caso de que un archivo con igual nombre ya se encuentre en "D:\backup\" y por lo tanto lo sobreescribirá.

/EXCLUDE:excluir.txt indica que, si se encuentra un directorio con un nombre igual que cualquiera que haya en el archivo excluir.txt, no copiará los archivos que contenga al directorio "D:\backup\" . El archivo excluir.txt debe estar en el mismo directorio en el que esté el archivo BAT, de lo contrario debes indicar la ruta completa, por ejemplo /EXCLUDE:D:\excluir.txt

Contenido del archivo excluir.txt . Un nombre de directorio por linea.
backup


Esto viene bien para cuando el directorio backup esta junto a los directorios de los cuales quieres copiar los archivos, pero no quieres que también te copie los archivos que hay en backup en backup lo cual te dará el error de El archivo no se puede copiar sobre sí mismo.

Por lo tanto, si el directorio backup no lo vas a tener en el mismo directorio donde están aquellos con nombre aleatorio de los cuales quieres copiar su contenido, puedes eliminar la linea /EXCLUDE:excluir.txt y no crear el archivo excluir.txt.


Contenido del archivo BAT que hará la copia.

setlocal ENABLEEXTENSIONS

for /f "usebackq" %%d in (`dir /AD /b`) do (
echo %%d
if /I "%%d" NEQ "." (
xcopy /Y %%d\*.* "D:\backup\" /EXCLUDE:excluir.txt
)
)
)


saludos
muchas gracias, a todos..me puse a manos a la obra y esto fue lo que me salió:


for /R D:\Lecturas\archivotxt /D %%v in (*) do (
xcopy %%v D:\Backup /i/v/y
)


Asi me dió el resultado que esperaba..muchas gracias por su ayuda y guía.

Saludos [bye]
Gracias por enseñarnos tu solución. [bye]
8 respuestas