esta parte no la entiendo
set filecontent=!filecontent!!currentline!
Simples variables.
 se q va a parar a archivo.txt lo q no se es q va a parar ahi
Está mal, no hace falta escapar el caracter de comillas dobles
Es q como les habia mencionado esto es para enviar un correo desde un batch lo q hace es llamar a una pagina php teniendo como parametros el mensaje y el mensaje lo puse entre comillas para q no me marcara error al ingresar la direccion asi q si vieramos lo q tiene el archivo de texto tendriamos
http://pagina.enviarmensajes/index.php?mensaje="informacion q recopilamos"
esa es la razon de esa comilla espero haber respondido a lo q me preguntabas si no ahi me lo haces saber  

con respecto a la otra cuestion a lo mejor lo raro son los ! ! y los ocupan para expandir las variables para evitar problemas en algunos loops o recursamientos o como los quieras llamar.
aqui esta la ayuda de windows donde viene explicado
Finalmente, se ha a¤adido compatibilidad para la expansi¢n de la variable
retardada. 
Este soporte est  siempre deshabilitado de forma predeterminada, pero puede
habilitarse o deshabilitarse a trav‚s del modificador de l¡nea de comandos
/V a CMD.EXE.  Ver CMD /?
La expansi¢n de la variable de entorno es £til para tratar con las
limitaciones de la expansi¢n actual, las cuales ocurren cuando una l¡nea de
texto es le¡da,  y no cuando se ejecuta.  El siguiente ejemplo demuestra el
problema con la expansi¢n de la variable inmediata:
   set VAR=antes
   if "%VAR%" == "antes" (
       set VAR=despu‚s
       if "%VAR%" == "despu‚s" @echo Si esto se puede ver, entonces 
                        significa que funcion¢
   )
dado que %VAR% se sustituye al mismo tiempo en ambas instrucciones IF 
cuando se lee la primera instrucci¢n IF, pues incluye l¢gicamente al cuerpo 
del IF, el cual es una instrucci¢n compuesta. De esta manera, IF, dentro de 
la instrucci¢n compuesta est  realmente comparando "antes" con "despu‚s" lo cu l 
nunca ser  igual. De un modo parecido, el siguiente ejemplo no funcionar  
como se espera:
    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%
en esto NO generar  una lista de archivos en el directorio actual, pero en
su lugar establecer  la variable LIST en el £ltimo archivo encontrado. De
nuevo, esto ocurre porque %LIST% es expandido s¢lo una vez cuando la
opci¢n FOR es le¡da, y en ese momento la variable LIST variable est  vac¡a.
As¡ el ciclo actual FOR que se est  ejecutando es:
    for %i in (*) do set LIST= %i
el cual s¢lo mantiene el valor LIST hasta el £ltimo archivo encontrado.
La expansi¢n de la variable de entorno retardada permite utilizar un
car cter diferente (el signo de exclamaci¢n para expandir variables en
tiempo de ejecuci¢n.  Si la expansi¢n de la variable retardada est 
habilitada, los ejemplos se pueden escribir de la siguiente manera para 
que funcionen como es necesario:
    set VAR=antes
    if "%VAR%" == "antes" (
        set VAR=despu‚s
        if "!VAR!" == "despu‚s" @echo Si esto se puede ver, entonces 
                       significa que funcion¢
    )
    set LIST=
    for %i en (*) do set LIST=!LIST! %i
    echo %LIST%
espero te ayude