1

У меня есть текстовый файл, который содержит 2 строки предложения. В конце 2-й строки у меня есть одно слово: « Живой». Это может быть Alive или Down.

Теперь мне нужно написать одну инструкцию IF, чтобы, если этот текстовый файл содержал Alive, он напечатал Привет, иначе он должен напечатать Hello. Это должно быть сделано с использованием командного файла.

1 ответ1

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

Этот пакет читает в вашем текстовом файле с ключом /N , который ставит число перед каждой строкой, например:

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

Новый текст передается во второй findstr, который использует шаблон RegEx ^2.*alive$ чтобы найти строку, которая начинается с 2 и заканчивается alive . Это была сложная часть.

Так как findstr устанавливает свой уровень ошибки равным 0, если найдено хотя бы одно совпадение, мы можем использовать простое выражение IF для отображения "Hi" или "Hello".


Партия в деталях

  • findstr ищет строки в файлах
  • /N ставит номер строки перед каждой строкой
  • . подстановочный знак для любого отдельного символа. Он говорит findstr, чтобы искать все
  • | это команда pipe Выход из первой команды передается как вход для второй
  • /I приказываю findstr искать без учета регистра, чтобы были найдены оба слова:"Живой" и "Живой"
  • ^ является термином RegEx и обозначает начало строки
  • .* является термином RegEx и обозначает неопределенное количество символов
  • $ является термином RegEx и обозначает конец строки
  • > NUL скрывает вывод findstr, поэтому соответствующая строка не отображается в окне CMD
  • IF condition (command) ELSE (command) является простым условием IF
  • %ERRORLEVEL% EQU 0 - это код выхода findstr. "EQU" расшифровывается как "equel"

Изменить (пример взят из комментария OP ниже)

  1. Ваш "Жив" не на 2-й строке. Это 5-й
  2. После "Alive" три пробела в вашем примере, так что alive$ не совпадает

    Замените ^2.*alive$ на 5.*alive . Или даже лучше ^5.* Alive $
    Обратите внимание на пробелы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .