OK - così tardi per la tavola, ma ... sembra che molti intervistati perso la specifica originale che tutti gli indirizzi email si verificano su 1 linea. Ciò significa che, a meno che non si introduca un CRLF con ogni occorrenza del simbolo @, i suggerimenti per l'uso delle varianti di FINDSTR/c non saranno di aiuto.
Tra gli strumenti Unix per DOS è il potente SED.exe. Google it. Roccia RegEx. Ecco un suggerimento:
find "@" datafile.txt | find "@" | sed "s/@/@\n/g" | find /n "@" | SED "s/\[\(.*\)\].*/Set \/a NumFound=\1/">CountChars.bat
Spiegazione: (supponendo che il file con i dati si chiama "Datafile.txt") 1) Il 1 Trovi comprende 3 righe di informazioni di intestazione, che getta un approccio line-count, quindi inserisci i risultati in una seconda (identica) ricerca per eliminare le informazioni di intestazione indesiderate.
2) Conduci i risultati sopra indicati a SED, che cercherà ogni carattere "@" e lo sostituirà con se stesso + "\ n" (che è una "nuova riga" o anche un CRLF) che ottiene ogni "@" su la propria linea nel flusso di output ...
3) Quando si collega l'output precedente da SED al comando FIND/n, si aggiungeranno i numeri di riga all'inizio di ogni riga. Ora, tutto ciò che dovete fare è isolare la porzione numerica di ogni riga e pre-impostarla con "SET/a" per convertire ogni riga in un'istruzione batch che (sempre più con ogni riga) imposta la variabile uguale al numero di quella riga.
4) isolare parte numerica di ogni linea e precedere il numero isolato a quanto sopra attraverso:
| SED "s/\[\(.*\)\].*/Set \/a NumFound=\1/"
Nel frammento di sopra, sei tubazioni in uscita del precedente comandi per SED, che utilizza questa sintassi "s/WhatToLookFor/WhatToReplaceItWith/"per fare questi passi:
a) cercare un "["(che deve essere "sfuggito" di precedere con "\")
b) iniziare a salvare (o" tokenizing ") che segue, fino alla chiusura"] "
--> in other words it ignores the brackets but stores the number
--> the ".*" that follows the bracket wildcards whatever follows the "]"
c) la roba tra il \(
e \)
è "token", che significa che può essere riferito a seguito, nella sezione "WhatToReplaceItWith". La prima roba che viene tokenizzata si riferisce a "\ 1" quindi seconda a "\ 2", ecc.
Quindi ... stiamo ignorando [e il] e stiamo salvando il numero che si trova tra le parentesi e IGNORING tutto il resto wild-carded di ogni linea ... quindi stiamo sostituendo la linea con la stringa letterale: Set /a NumFound=
+ il numero salvato, o "tokenized", vale a dire ... la prima riga leggerà : Set /a NumFound=1
... & riga successiva si legge: Set /a NumFound=2
etc. etc.
Quindi, se si dispone di 1.283 indirizzi di posta elettronica, i risultati avranno 1.283 linee.
L'ultimo eseguito = quello che conta.
Se si utilizza il carattere ">" per reindirizzare tutto l'output sopra per un file batch, vale a dire: > CountChars.bat
... poi basta chiamare che file batch & avrete una variabile di ambiente DOS chiamato "NumFound" con la tua risposta.
Restituisce 1 pure. – Patryk
@Patryk, errore mio, ho letto male che tutte le email erano su ciascuna sulla propria linea. Revisionerà. –