Antes de nada, hay un error: fallaba cuando tenia que mostrar el primer caracter "T".@echo off
echo Introduce un NIF
set /p dni=
set cadena=TRWAGMYFPDXBNJZSQVHLCKE
set /a resto=%dni%-(23*(%dni%/23))
:bucle
if %resto%==0 goto fin
set /a resto-=1
set cadena=%cadena:~1,23%
goto bucle
:fin
echo La letra del NIF es %cadena:~0,1%
pause>nul
Perdón por el primer código, pasa por hacerlo deprisa.
Explicación:
La idea es ir eliminando un caracter del principio de la cadena por cada unidad del resto. Y después mostrar el primer caracter de los que queden.
if %resto%==0 goto fin, comprueba si el resto es o ha llegado a cero y termina.
set /a resto-=1, resta una unidad al resto.
set cadena=%cadena:~1,22%, coge 22 (para asegurarnos de abarcar todo) caracteres a partir de la posición 1, es decir todos menos el primero.
echo La letra del NIF es %cadena:~0,1%, igual que el anterior, en este caso desde la posición 0 y solamente 1 caracter.
La razón de usar este sistema en vez de simplemente:
echo La letra del NIF es %cadena:~%resto%,1%- es que devuelve literalmente:
cadena:~-n,1 , donde n es el resto.
Si alguien sabe evitar esto seria de gran utilidad y simplificaria muchísimo el código.
Espero que hayas entendido el código.
Saludos