Título: renombrar ficheros con distintos nombres Publicado por: 500DRIFT en 7 Agosto 2022, 23:36 pm Hola a todos
soy nuevo en esta pagina estoy aprendiendo Bach ya que me gusta la informática. tengo una duda con un Bach que con lo que he ido leyendo en este foro y en otros sitios he conseguido. Me gustaría que me ayudarais o que me pudierais guiar en lo que pudierais sobre el Bach que he creado. Estoy intentando crearme un .bat para cambiar los nombres de los capítulos de una seri teniendo un txt con la lista. Lo que en este bat intento hacer es hacer una lista con los nombres que están puestos en la carpeta Ej: prueba prueba2 capitulo1 capitulo nuevo 1 capitulo2 capitulo nuevo 2 capitulo3 capitulo nuevo 3 y en el txt que tengo los nuevos nombres (todos diferentes claro) mi bach es este: dir /b > prueba.txt @echo off for /f "tokens=*" %%x in ('type prueba.txt') do (echo ren "%%x") >> prueba1.tmp for /f "tokens=*" %%x in ('type prueba2.txt') do (echo "%%x") >> prueba2.tmp Setlocal EnableDelayedExpansion set archorig=prueba1.tmp set archorig1=prueba2.tmp set archdest=total.txt for /F "tokens=*" %%a in (%archorig% %archorig1%) do ( rem: %%a set lin=%%a echo !lin!>>%archdest% echo. ) echo. del *.tmp pause>nul goto:eof El resultado es primero la lista y luego los nombres nuevos pero con los cambios. EJ: ren "capitulo1" ren "capitulo2" ren "capitulo3" "capitulo nuevo 1" "capitulo nuevo 2" "capitulo nuevo 3" Alguien podría decirme que hago mal, ya que lo que necesitaría seria ren "capitulo1" "capitulo nuevo 1" ren "capitulo2" "capitulo nuevo 2" ren "capitulo3" "capitulo nuevo 3" Muchas gracias Título: Re: renombrar ficheros con distintos nombres Publicado por: EdePC en 9 Agosto 2022, 00:40 am Pues nop, el bucle For abre los archivos en serie (primero uno y luego el otro), en ejemplo veo que piensas que lo hace en paralelo (ambos a la vez)
Código Básicamente entiendo que quieres abrir dos archivos de texto a la vez y trabajar línea a línea de cada uno, eso es algo complejo de hacer en Batch, tienes que usar Buffers para esto, en uno depositas el contenido de un archivo y en otro lo del otro archivo No sé que tanto hayas avanzado en tu entrenamiento de Batch pero tendrías que tener claro los Redireccionamientos para luego hacer un uso avanzado de ellos en Buffers Conceptos rápidos: - Hay tres manejadores utilizados en Batch: STDIN = 0 Entrada por teclado STDOUT = 1 Salida normal por pantalla STDERR = 2 Salida de errores por pantalla -- Luego estás los otros manejadores del 3 al 9 que no se utilizan y que se pueden aprovechar para otros fines - Hay dos redireccionadores de entrada y salida: > para redireccionar Salidas y < para redireccionar Entradas - Redireccionar la salida de un comando a un archivo: como se espera que la redirección será del STDOUT (1 Salida normal por pantalla) resultante de ejecutar un comando sin errores se sobreentiende el 1, el siguiente ejemplo muestra dos líneas que hacen exactamente lo mismo: Código - Redireccionar la salida de varios comandos a un archivo, todas las secciones son equivalentes: Código
- Escribir la primera línea de un archivo a una variable, se usa Set /P "variable=" para que se reciba por teclado el contenido de variable, entonces se puede redireccionar el contenido de un archivo a STDIN (0 Entrada por teclado), como se espera entrada por teclado se sobreentiende que se utilizará el manejador 0, el siguiente ejemplo muestra dos líneas que hacen lo mismo: Código --- Bien, ahora para hacer tu ejercicio hay que usar un manejador no utilizado por Batch, ahí tienes disponibles del 3 al 9, el For /F ya es capaz de manejar línea a línea un archivo, solo falta tener a la mano otro archivo más en un Buffer que será justo un manejador al que se le redireccionará el contenido del otro archivo. Paso 1, tenemos estos archivos: prueba.txt Código: ren "capitulo1" prueba1.txt Código: "capitulo nuevo 1" Paso 2, el script sería: Código - En la línea 3 se redirecciona el contenido de prueba2.txt al manejador 3, luego va el comando a ejecutar, en este caso como serán varias instrucciones se agrupa todo entre paréntesis, al final en la línea 8 se redirige todo el resultante al archivo total.txt - En la línea 5 se redirecciona el contenido del manejador (buffer) 3 al 0 (teclado) para que sea utilizado por el Set /P (primera línea), con cada iteración se van consumiendo una a una las líneas de buffer Paso 3, el archivo total.txt quedaría: Código: ren "capitulo1" "capitulo nuevo 1" --- Referencias: https://codeutility.org/windows-how-can-two-text-files-be-read-in-parallel-by-a-batch-file-stack-overflow/ Material recomendado: Tutorial de Programación Batch (Nikos3194, 2013) https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf Programación BATCH Avanzada (Sirdarckcat, 2006) https://foro.elhacker.net/dlattach.html;topic=132924.0;attach=1858 Windows Command Reference 2011 https://download.microsoft.com/download/7/2/9/729BB069-C0B9-4C68-9245-0ED23C11B6ED/WinCmdRef.chm SS64 Command line OS Scripting references (CMD Reference) https://ss64.com/nt/ Título: Re: renombrar ficheros con distintos nombres Publicado por: 500DRIFT en 9 Agosto 2022, 19:18 pm Buenas tardes
Gracias EdePC por la explicación, veo que me queda mucho camino por recorrer. Tu explicación no podía ser mas detallada, me pondré con el material que me has recomendado ya que quiero aprender mas sobre Bach. De nuevo muchas gracias y cuando tenga todo el código lo expondré con los ejemplos, espero que ha alguien mas le pueda ayudar. Un saludo Título: Re: renombrar ficheros con distintos nombres Publicado por: 500DRIFT en 12 Agosto 2022, 00:09 am Buenas noches
Os traigo el Bach explicado por partes que he acabado gracias a EdePC archivo-> inicio.txt lista inicial capitulo1 capitulo2 capitulo3 archivo-> final.txt nombres que quedaran al final capitulo nuevo 1 capitulo nuevo 2 capitulo nuevo 3 Añadimos ren y comillas a nuestra lista inicial Código Sustituimos las vocales que tienen tildes Código Añadimos la numeración de los capítulos Código Elegimos que extensión si mp4 o mkv Código Final3.tmp lo insertamos en inicio.txt Código Cambiamos la extensión para convertirlo en bat, ejecutarlo y borrar los archivos creados Código
|