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.

utilisateur284262
la source
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.

Nixda
la source
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