@echo off
ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)"
примечание : код для использования внутри командного файла. Чтобы использовать из командной строки, замените %%a
на%a
Запустите эхо-запрос, принудительно установите правильный строковый буферизованный вывод ( find /v
) и запустите cmd
процесс с включенным отложенным расширением, который будет выполнять бесконечный цикл чтения передаваемых по конвейеру данных, которые будут отображаться на консоль с префиксом текущего времени.
2015-01-08 отредактировано : В более быстрых / новых машинах / версиях ОС существует проблема синхронизации в предыдущем коде, что заставляет set /p
читать строку, пока ping
команда все еще записывает ее, и результатом является обрезание строки.
@echo off
ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"
В pause
начале подоболочки включены две дополнительные команды (можно использовать только одну, но поскольку она pause
потребляет входной символ, пара CRLF разрывается и строка с LF читается) для ожидания входных данных, а ping -n 2 localhost
в подождите секунду для каждого чтения во внутреннем цикле. Результат - более стабильное поведение и меньшая загрузка ЦП.
ПРИМЕЧАНИЕ. Внутренний ping
элемент можно заменить на a pause
, но тогда первый символ каждой прочитанной строки будет поглощен pause
и не полученset /p