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