Windows CMD: Как передать вывод работающей программы в FINDSTR и записать в файл

Я пытаюсь отфильтровать вывод работающей программы (ping) и записать результаты в файл.

В следующем примере программа ping работает до нажатия CTRL-C:

ping www.google.com -t | findstr "Reply" >> file.txt

Результатом этого является создание файла file.txt, однако содержимое пустое.

С другой стороны, следующий код без передачи в findstr работает при прерывании с помощью CTRL-C

ping www.google.com -t >> file.txt

Что мне здесь не хватает?

3 ответа

Решение

Управление написанием команды findstr чувствительно к регистру, вы можете использовать /I для отключенного регистрозависимого и не использовать двойные кавычки

Параметр t не разрешает перенаправление в файле, потому что канал получает результат, прежде чем выполнить FINDSTR, если при использовании файла параметров n с номером Reply дождаться окончания воспроизведения, чтобы увидеть файл результатов.

ping www.google.com -n 200 | findstr /I reply  >> file.txt

Просто попробуйте for петля

@echo off
(for /l %%a in (0) do ping -t -n 1 www.google.com | findstr /i "reply")>file.txt

Файл будет заполнен, когда закончится команда piped. Но ping -t никогда не закончится. Вы должны построить свой собственный цикл (который имеет некоторые преимущества...):

:loop
<nul set /p "=%time% " >>file.txt
ping -n 1 www.google.de|find /i "Reply" >>file.txt
ping -n 2 -w 500 localhost >nul
goto :loop

второй ping это просто "ожидание 500 мс".

Из документации ping:

-t: проверять связь с указанным хостом до остановки.

Это означает, что он ждет завершения ввода пользователя pingкоманда.
С другой стороны, труба ждала ввода и перенаправляла любой полученный ввод наfile.txt(в этом случае ввод не был получен, потому чтоping ожидает завершения ввода пользователя pingкоманда, поэтому был создан пустой файл)

Вы можете сначала перенаправить ping в файл:
ping www.google.com -t >> file.txt

Затем, когда у вас будет достаточно пингов (через Ctrl-C), отфильтруйте с помощью findstr:
findstr "Reply" file.txt >> file2.txt

Другие вопросы по тегам