Script batch pour trouver le dernier mot d'une ligne spécifique


1

J'ai un fichier texte qui contient 2 lignes d'une phrase. À la fin de la deuxième ligne, j'ai un mot qui dit Alive . Il peut être vivant ou en panne.

Maintenant, je dois écrire une instruction IF telle que si ce fichier texte contient Alive, il devrait afficher Hi sinon, il devrait afficher Hello . Cela doit être fait en utilisant un fichier de commandes.


Lire ci-dessous post: stackoverflow.com/questions/130116/… . Vous devrez le faire fonctionner pour vous
Ankur140290

Réponses:


2
@echo off
findstr /N . input.txt | findstr /I ^2.*alive$ > NUL    
IF %ERRORLEVEL% EQU 0 (Echo Hi) ELSE (Echo Hello)
pause

Ce lot lit dans votre fichier texte avec le /Ncommutateur, ce qui met un numéro devant chaque ligne, comme:

1:This is a test,
2:and I am alive
3:Not?

Le nouveau texte est redirigé vers le second findstr , qui utilise le modèle RegEx ^2.*alive$pour rechercher une ligne commençant par 2et se terminant par alive. C'était la partie difficile.

Puisque findstr définit le niveau d'erreur sur 0 si au moins une correspondance est trouvée, nous pouvons utiliser une simple instruction IF pour indiquer "Bonjour" ou "Bonjour".


Lot en détail

  • findstrrecherche des chaînes dans les fichiers
  • /N met un numéro de ligne devant chaque ligne
  • .est un joker pour n'importe quel caractère. Il dit à findstr de tout rechercher
  • |est la commande de pipe. La sortie de la première commande est passée en entrée pour la seconde.
  • /Iindique à findstr de rechercher sans tenir compte de la casse afin de trouver "Alive" et "alive"
  • ^ est un terme RegEx et représente un début de ligne
  • .* est un terme RegEx et représente un nombre indéfini de caractères
  • $ est un terme RegEx et représente une fin de ligne
  • > NULmasque la sortie findstr pour que la ligne correspondante ne soit pas affichée dans la fenêtre CMD
  • IF condition (command) ELSE (command)est une simple condition IF
  • %ERRORLEVEL% EQU 0est le code de sortie de findstr. "EQU" signifie "equel"

Modifier ( exemple tiré du commentaire de l'OP ci-dessous)

entrez la description de l'image ici

  1. Votre "Alive" n'est pas à la 2e ligne. C'est le 5
  2. Après "Alive" il y a trois espaces dans votre exemple, donc alive$ne correspond pas

    Changer ^2.*alive$en 5.*alive. Ou encore mieux ^5.* Alive $
    Notez les espaces.


Bonjour, j'ai essayé la commande ci-dessus, mais errorlevel arrive à 1.
user284262

Bonjour, j'ai essayé la commande ci-dessus, mais errorlevel arrive à 1. Il est donc toujours à la recherche du fichier Hello.Text qui ressemblera à celui ci-dessous Oabcdefghijklmno2 ~ | 8496 | Coreapplication_obijh1 vivant | Oabcdefghijklmno3 ~ | 8400 | Cabcdefghijklmnop2 vivant | Oabcdefghijklmno4 ~ | 9092 | Coreapplication_obis1 vivant | Oabcdefghijklmno5 ~ | 10268 | Alive
user284262

Collez votre fichier journal à pastebin ou notepad.cc et postez un lien ici. Je suppose que votre mot de recherche "Alive" ne se trouve pas à la toute fin de la deuxième ligne
nixda

Processus dans l'instance: instance2 --------------------------------- + ----------- --------- + --------- + --------- ias-composant | type de processus | pid | statut --------------------------------- + --------------- ----- + --------- + --------- coreapplication_obijh1 | OracleBIJavaHostC ~ | 8400 | Alive
user284262

au-dessus de l'un est mon fichier, je dois vérifier Alive ou down, actuellement il montre Alive.
user284262
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.