2009-02-13 5 views
1

Je veux écrire un script batch qui devrait lire un fichier texte ligne par ligne et rechercher un mot-clé.Script Batch pour lire chaque ligne de fichier texte et renvoyer une valeur?

Si le mot-clé est trouvé, il devrait renvoyer la valeur 0 sinon il devrait renvoyer 1. Comme ceci, il devrait continuer à incrémenter la valeur jusqu'à la fin du fichier. La sortie doit aller dans un fichier.

Le journal de l'échantillon est la suivante,

Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 

Fondamentalement, je veux compter le nombre de fois que le site a échoué. Donc, si le site Web est correct, alors il devrait renvoyer la valeur '0' s'il n'est pas alors la valeur '1'.

Dernier point, mais non le moindre, je veux que le nombre total de fois que le site a échoué.

+0

Vous cherchez un script batch DOS ou un script shell Unix? Et à quoi ressemblera le journal en cas d'échec? –

+0

Cela peut certainement être fait dans un fichier batch, mais je demanderais pourquoi? Pourquoi ne pas apprendre quelque chose d'un peu plus utile si vous devez apprendre quelque chose? – EBGreen

Répondre

3

Sur Unix

fgrep 'keyword' log.txt | wc -l 
+0

Shorter: fgrep -c 'mot-clé' log.txt – Thomas

3

Pour Windows .bat:

FINDSTR /V /B /C:"HTTP/1.1 2" log.txt 

listera chaque ligne qui n'a pas (/ V) commencer par (/ B) le littéral (/ C :) chaîne "HTTP/1.1 2".

Étant donné que les codes de réussite HTTP sont dans le bloc 200 (par exemple, 203 pour l'accès au cache), cela affichera uniquement les réponses de non-succès. FINDSTR a un support de regex, mais il est assez faible, (pas de groupement ou d'alternance, surtout), donc si vous voulez filtrer plusieurs codes de réponse en utilisant FINDSTR, vous devrez les chaîner, par exemple pour filtrer les échecs Auth:

FINDSTR /V /B /C:"HTTP/1.1 2" log.txt | FINDSTR /V /B /C:"HTTP/1.1 403" 
0

Sous DOS ce serait la ligne suivante. Remplacer "FAIL STRING" avec tout ce qu'une ligne contiendra quand le serveur est mort.

FIND /C "FAIL STRING" log.txt

Cette affiche quelque chose comme ce qui suit quand il y a deux lignes contenant "FAIL STRING"

---------- LOG.TXT: 2

Vous pouvez également utiliser% ERRORLEVEL% pour déterminer s'il y a eu des erreurs. Comme ceci:

FIND /C "FAIL STRING" log.txt
IF ERRORLEVEL 1 ECHO Everything is A-OK
IF NOT ERRORLEVEL 1 ECHO There were failures

Bonne chance,
Randy

+0

Soyez prudent avec ERRORLEVEL, ce n'est pas un envvar réel, IF et %% ont un support spécial.Donc, si vous définissez ERRORLEVEL = 1, les sorties ultérieures ne le changeront pas. –

Questions connexes