Qué bueno que te sirviera! Puedo decirte que lo que sé de Batch lo he aprendido solo aquí en el foro y en tan solo unos meses gracias a la ayuda de los compañeros y moderadores que de verdad están dispuestos a ayudar. De modo que me uno a ti en el agradecimiento.
Lo de tus preguntas es muy sencillo.
En primer lugar:
Si te fijas bien, lo que hago en esta línea es crear la variable
line con el valor de la variable del FOR (
%%F), pues esta última se encarga de extraer el texto de cada línea del archivo que indicaste. Por eso le di el nombre "line" (línea) a esa variable.
For /f "useback tokens=*" %%F in ("%file%") do (
...
set "line=%%F"
...
)
Tu segunda duda:
Bueno, esta línea la uso en la etiqueta :Contar para saber cuántos caracteres (nchar) tiene la palabra que indicaste (string) para buscar en el archivo de texto (file). Si te fijas, esta etiqueta lo que hace es ir sumando nchar hasta que llega al último caracter. Déjame darte algunos ejemplos:
Si tengo la variable "VAR=Hola mundo" y quiero mostrar su valor, solo debo usar un echo:
echo Valor de VAR: "%VAR%"
Se mostraría esto:
Valor de VAR: "Hola mundo"
Ahora, si no quiero ver todo su contenido sino una fracción, por ejemplo, los primeros tres caracteres, haría lo siguiente:
echo Valor fraccionado de VAR: "%VAR:~0,3%"
El primer número indica la posición (0) y el segundo (3) los caracteres que se mostrarán desde esa posición. Así pues, el resultado de esto sería:
Valor fraccionado de VAR: "Hol"
Bueno, no sé si ya conocías ese detalle, pero por si acaso lo expliqué.
Ahora bien, debes haber notado que en mi código original hay algunas diferencias, particularmente respecto a los dos signos de admiración (!) que usé. Esto se debe a que necesitaba usar una variable para determinar la posición, en vez de indicarla directamente con un número. No funcionaría de hacerlo de este modo:
Ahora bien, debo mencionar que para que puedan usarse estos signos (!) en vez de los porcentajes (%) hay que escribir la línea:
setlocal enabledelayedexpansion
que si ves, usé al principio antes de llamar a la etiqueta :Contar. Eso lo aprendí hace poco, aunque debo confesar que no entiendo bien por qué es necesario. He leído que tiene que ver con unas tales variables retardadas, pero hasta ahí.
Creo que esto abarca lo de tus dudas, y tal vez más... Jaja! Espero que por lo menos hayas quedado claro.