OK - camino tarde a la mesa, pero ... parece que muchos de los encuestados perdieron la especificación original que todas las direcciones de correo electrónico se producen en 1 línea. Esto significa que a menos que introduzca un CRLF con cada aparición del símbolo @, sus sugerencias para usar variantes de FINDSTR/c no ayudarán.
Entre las herramientas de Unix para DOS se encuentra el muy potente SED.exe. Buscalo en Google. Mece RegEx. He aquí una sugerencia:
find "@" datafile.txt | find "@" | sed "s/@/@\n/g" | find /n "@" | SED "s/\[\(.*\)\].*/Set \/a NumFound=\1/">CountChars.bat
Explicación: (suponiendo que el archivo con los datos se denomina "Datafile.txt") 1) La primera FIND incluye 3 líneas de información de la cabecera, lo que arroja un enfoque de línea de conteo, de modo que canalice los resultados a un segundo hallazgo (idéntico) para quitar la información del encabezado no deseado.
2) Transfiera los resultados anteriores a SED, que buscará cada carácter "@" y lo reemplazará con sí mismo + "\ n" (que es una "nueva línea" también conocida como CRLF) que activará cada "@" su propia línea en la secuencia de salida ...
3) Cuando canaliza la salida anterior de SED al comando FIND/n, estará agregando números de línea al principio de cada línea. Ahora, todo lo que tiene que hacer es aislar la parte numérica de cada línea y colocar "SET/a" para convertir cada línea en una declaración de lotes que (cada vez más con cada línea) establece la variable igual al número de esa línea.
4) aislar parte numérica de cada línea y prologar el número aislado por lo anterior a través de:
| SED "s/\[\(.*\)\].*/Set \/a NumFound=\1/"
En el fragmento anterior, que está tubería de salida de los comandos anteriores a SED, que utiliza esta sintaxis "s/WhatToLookFor/WhatToReplaceItWith/"para hacer estos pasos:
a) buscar un "["(que debe ser "escapó" por prologando con "\")
b) comenzar a ahorrar (o" tokenización ") lo que sigue, hasta el cierre"] "
--> in other words it ignores the brackets but stores the number
--> the ".*" that follows the bracket wildcards whatever follows the "]"
c) el material entre el \(
y la \)
es "tokenizados", lo que significa que se puede hacer referencia a más tarde, en la sección "WhatToReplaceItWith". Las primeras cosas que se tokenizan se mencionan a través de "\ 1" y luego como "\ 2", etc.
Entonces ... estamos ignorando [y] y estamos guardando el número que se encuentra entre los corchetes e IGNORANDO todo el resto salvaje de cada línea ... así estamos reemplazando la línea con la cadena literal: Set /a NumFound=
+ el número guardado, "tokenizado", es decir, ... la primera línea leerá : Set /a NumFound=1
... & lee la siguiente línea: Set /a NumFound=2
etc etc
Por lo tanto, si usted tiene 1.283 direcciones de correo electrónico, sus resultados tendrán 1.283 líneas.
El último ejecutado = el que importa.
Si utiliza el carácter ">" para redireccionar toda la salida anterior a un archivo por lotes, es decir: > CountChars.bat
... luego simplemente llamar a ese archivo por lotes & tendrá una variable de entorno DOS llamado "NumFound" con su respuesta.
Devuelve 1 también. – Patryk
@Patryk, mi error, leí mal que todos los correos electrónicos estaban en cada uno en su propia línea. Revisaremos –