La verdad es que es una tontería, vas por buen camino pero te diré:
...
for /F "tokens=1,2,3 delims=:" %%a in (agenda.txt) do (
echo %%a %%b %%c | find "%nomb%"
)
...
Por medio de ésto estás extrayendo las tres columnas de cada fila (%%a, %%b y %%c), y el
find al encontrar en alguna de éstas filas una cadena que sea igual a la que tengas en
%nomb% la imprime. Bien, entonces, ésto no es correcto para lo que te pide el ejercicio pero no vas mal encaminado, porque si tuvieras un nombre en apellidos o si pusiéramos de nombre "roca", nos mostraría los datos de "susel", y no debería mostrar nada, ya que "roca" es el apellido. Vale, entonces lo que tienes que hacer sabiendo que %%a corresponde al nombre, que %%b corresponde al apellido y %%c al número, es que poner una opción según sea el caso y luego imprimirlo. Para evitar que find te imprima el echo tienes que redireccionar la salida a
nul (find %patron% > nul ) y luego usar
&& para si el caso es que existe ese patrón, acompañado de la secuencia de comandos correspondiente, y || en caso de no existir el patron.
Ejemplo:
...
for /F "tokens=1,2,3 delims=:" %%a in (agenda.txt) do (
if [%opt%] equ [1] echo %%a | find "%nomb%" > nul && (printf "%%a\nNOMBRE\n%%b\nAPELLIDO\n%%c\nTELEFONO")
)
printf "\nFin de la busqueda."
pause
...
De esta forma excluyes el resto de columnas y sólo validas la fila que te interesa.
Quizás la variable %nomb% debería pasar a llamarse
%cadena% o
%patron%, y al principio pon condiciones para cambiar el mensaje de entrada según a la opción escogida.
También observe el detalle del uso del
printf en vez del
echo. Esto es debido a que printf acepta o permite el uso del carácter de salto de línea (\n), aunque también se podría solucionar poniendo 6 echos.