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)
for /F "tokens=*"
%%a in (%archorig% %archorig1%) do (
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:
Echo Hola mundo
>archivo.txt
Echo Hola mundo 1
>archivo.txt
- Redireccionar la salida de varios comandos a un archivo, todas las secciones son equivalentes:
Echo esta es la linea dos
Echo y esta la linea tres
) >archivo.txt
(
Echo esta es la linea dos
Echo y esta la linea tres
) >archivo.txt
(
Echo esta es la linea dos
Echo y esta la linea tres
) 1>archivo.txt
>archivo.txt (
Echo esta es la linea dos
Echo y esta la linea tres
)
1>archivo.txt (
Echo esta es la linea dos
Echo y esta la linea tres
)
- 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:
Set /P "variable="
<archivo.txt
Set /P "variable=" 0
<archivo.txt
---
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
ren "capitulo1"
ren "capitulo2"
ren "capitulo3"
prueba1.txt
"capitulo nuevo 1"
"capitulo nuevo 2"
"capitulo nuevo 3"
Paso 2, el script sería:3<prueba2.txt (
For /F "tokens=*"
%%i In (prueba.txt
) Do ( )
) >total.txt
- 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:ren "capitulo1" "capitulo nuevo 1"
ren "capitulo2" "capitulo nuevo 2"
ren "capitulo3" "capitulo nuevo 3"
---
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.pdfProgramación BATCH Avanzada (Sirdarckcat, 2006)
https://foro.elhacker.net/dlattach.html;topic=132924.0;attach=1858Windows Command Reference 2011
https://download.microsoft.com/download/7/2/9/729BB069-C0B9-4C68-9245-0ED23C11B6ED/WinCmdRef.chmSS64 Command line OS Scripting references (CMD Reference)
https://ss64.com/nt/