los echo juntos, como ya sabras pienso yo! echo. es para dejar una linea en blanco y saltar a la otra, y uso los "&&" para escribir en la misma linea los 2 comandos (podes usar cualquier comando, y se ejecutara el segundo SOLAMENTE si el primero se ejecuto sin problemas), y todo eso lo hice simplemente para dejar dos lineas de espacio al principio.
Lo de anular la variable frase, en este caso no pasaria nada, pero si pasaria en otros casos donde vuelves a preguntar el valor de la variable frase, ya que si el usuario no ingresa nada, la variable ya tenia el valor que le habiamos dado antes y se quedaria con ese, y no queremos eso.
Lo del if not defined, ya lo entendiste.
Ahora.. sobre "set frase =%frase:e=XXX%" eso lo que hace es ponerle un nuevo valor a la variable frase, que en este caso sera el de ella misma pero con todas las letras "e" cambiadas por "XXX". Pero claramente podria haber usado otra variable distinta haciendolo asi:
set variable=
%frase:e=XXX%
Y asi con otras variables podria seguir haciendo:
set variable2=
%variable:g=RRR% set variable3=
%variable2:h=Edu%
Entiendes lo que voy haciendo? a la primer variable frase, le hice una modificacion y la guarde en variable, luego a variable le hice una modificacion y la guarde en variable2, y todo asi. Pero para que crear otras variables si podes seguir usando la misma?
Si no entiendes pregunta, que es lo que hay que hacer siempre
Y si estas creando esto por hobby simplemente, porque quieres aprender batch, se de algo que te puede ayudar, me mandas mp, saludos!
edit: Con el codigo que te deje, tienes que hacer lo que te pide el programa.. INGRESAR UNA FRASE, por ejemplo: "eduardo es un elefante electrico" xD fijate que cambia las "e" por XXX