El "FOR /L" (da igual mayúsculas que minúsculas pero a mí me gustan más las minúsculas) asigna a la variable interna del FOR, que en este caso he decidido que se llame %%a (si es dentro de un bat las variables internas deben ir precedidas de un doble %), valores empezando con el primero del IN (es decir el 1), en pasos sucesivos del paso indicado en el segundo valor del IN (el segundo 1) hasta alcanzar el valor indicado en el tercero (el 5). El DO representa los comandos que hay que ejecutar para cada valor sucesivo de %%a, deben ir incluidos entre paréntesis y si se quiere usar más de una línea se debe terminar la primera en el paréntesis de apertura. El SET asigna a la variable "fecha" el valor de los 10 primeros caracteres de la variable dat%%a, es decir, sucesivamente dat1, dat2, dat3, dat4 y dat5 según los sucesivos valores de %%a (1, 2, 3, 4 y 5). El carácter "~" indica precisamente esa función (tomar partes de una variable), el "0" la primera posición y el 10 el número de caracteres a partir del indicado. Con esto se cargan en la variable "fecha" sucesivamente las partes de fecha de las variables "dat%%a" para luego compararlas con la fecha de hoy (variable interna DATE).
Espero que te quede claro. Si quieres más información sobre el comando FOR (el más potente, a mi juicio, del MSDOS) puedes buscarlo en la red o, simplemente, teclear "FOR /?" en una ventana MSDOS.
Excelente idea la del recordatorio, lo grabe como bat al código, pero al hacer click en el archivo, no me muestra el mensaje, subiré un tema - Vi sor