Mover Archivo y renombrarlo en la carpeta nueva.

Tengo el siguiente código;

rem @echo off
for /f "tokens=*" %%a in ('dir /b /on D:\NCLIENTE\*.dat') do (
move D:\NCLIENTE\"%%a" "D:\Archivos de programa\carpeta\prueba"
exit
)

Para mover archivos de una carpeta a otra, el código funciona perfectamente.

Pero necesito que el archivo movido sea renombrado con un nombre único. Ejemplo: texto.dat

2 Respuestas

Respuesta
1

Mis disculpa por no darme a entender.

Los archivos que voy a mover tienen distintos nombres pero su extensión es única ejemplo (.dat).

Lo que deseo es que cada vez que mueva un archivo, este archivo movido me lo cree con un nombre único ejemplo (texto.dat)

Una vez que to termine de procesarlo lo elimino y procedo a mover otro archivo pero con el nombre (texto.dat) y así sucesivamente.

Respuesta
1

A ver. Hay algo que no entiendo, ¿quieres que todos los archivos con extensión DAT de la carpeta NCLIENTES se copien en uno solo, de nombre TEXTO.DAT en la carpeta destino? Eso supondría que solo el último en moverse fuera el que "ocupara" ese archivo. El BAT que sigue haría eso (por cierto que hay cosas en tu BAT que no acabo de entender, como meter el EXIT dentro de los comandos del FOR, ni el /on del comando DIR si previamente le has puesto /b):

@echo off
for /f "tokens=*" %%a in ('dir /b D:\NCLIENTE\*.dat') do (
move D:\NCLIENTE\"%%a" "D:\Archivos de programa\carpeta\prueba\texto.dat"
)
exit

Otra cosa sería que quisieras añadir una parte fija al nombre del DAT en la carpeta destino, por ejemplo precederlos con "TEXTO". Esto lo podrías conseguir con (perdón por los snippet en blanco, es que no consigo borrarlos):

@echo off
for /f "tokens=*" %%a in ('dir /b D:\NCLIENTE\*.dat') do (
move D:\NCLIENTE\"%%a" "D:\prueba\texto%%a"
)
exit

Ya me contarás si te vale. O si hay aspectos que no he entendido.

Perdón. Acabo de ver que el "/on" del comando DIR es culpa mía. En otra pregunta anterior que contesté lo incluía yo en la solución que te aportaba. De modo que me pondré yo mismo las "orejas de burro", porque lo que es cierto es que no aporta gran cosa después de un /b (ordenar por nombre).

Otra cosa. Me acabo de dar cuenta de que en el segundo bat no he copiado correctamente la carpeta de destino (he mantenido la que tenía en mis propias pruebas en lugar de respetar la de tu ejemplo). Por tanto donde dice:

move D:\NCLIENTE\"%%a" "D:\prueba\texto%%a"

debería decir:

move D:\NCLIENTE\"%%a" "D:\Archivos de programa\carpeta\prueba\texto%%a"

                    

Vale. Entonces el exit estaba bien puesto.

El bat sería:

@echo off
for /f "tokens=*" %%a in ('dir /b D:\NCLIENTE\*.dat') do (
move D:\NCLIENTE\"%%a" "D:\Archivos de programa\carpeta\prueba\texto.dat"
exit
)

Esto te mueve el primero de la carpeta origen al destino, con nombre TEXTO.DAT.

Una vez tratado vuelves a ejecutar el BAT y pasaría al siguiente.

¡Gracias! 

Buenas noches compañero.

Gracias por la ayuda, un abrazo.

Si no es tanto pedir me gustaría aprender más sobre los batch que libro o que link me recomienda.

Saludos,

Un Abrazo. Muy agradecido

¡Hombre! Yo creo que hay bastante información en la red si buscas "batch para principiantes". No he entrado muy a fondo en la información de estos dos enlaces pero en un primer vistazo parece que está bien planificada y que es bastante completa:

http://ensayandopopup.webcindario.com/pdfs/batch.pdf

http://www.taringa.net/posts/info/10643354/Curso-de-Batch-para-principiantes.html 

Y, por supuesto, para cualquier duda puedes acudir a esta página (y a otras cuantas que hay por ahí).

Por cierto: en lo que se refiere al BAT que nos ha estado ocupando, si fuera posible incluir la llamada al tratamiento de los archivos TEXTO.DAT dentro del bucle del FOR (haciendo esa llamada en lugar del EXIT), podría completarse todo el proceso en una sola ejecución del BAT. Pero habría que "invocar" o lanzar el ejecutable correspondiente desde el bucle. Supongamos que ese tratamiento lo realizase un ejecutable de nombre TRATAR.EXE, que se encuentra en la carpeta D:\Achivos de programa\tratamiento, que actua siempre sobre el archivo TEXTO.DAT, el siguiente BAT podría completar, en una sola ejecución, todo el proceso:

@echo off
for /f "tokens=*" %%a in ('dir /b D:\NCLIENTE\*.dat') do (
move D:\NCLIENTE\"%%a" "D:\Archivos de programa\carpeta\prueba\texto.dat"
"D:\Archivos de programa\tratar"
)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas