CMD - печать полного цикла на экран и файл одновременно и непрерывно - PullRequest
0 голосов
/ 16 июня 2019

TL; DR;

В командном файле CMD на win - Как добавить / напечатать вывод полного цикла в оба файла И на экран одновременно && непрерывно?

Длинная версия:

Я знаю, что это скорее задача powershell / bash или, как правило, лучше подходит для * nix / piping, но по какой-то причине мне нужно делать это на win (7!) Batch / cmd.

У меня есть несколько взломанный супер простой маленький примитивный цикл (на win 7) с некоторыми сетевыми задачами, чтобы проверять (локальные) обновления DNS-списков каждые x секунд, сбрасывать локальный DNS, а затем снова проверять на распространение. из win, чтобы потом быть проанализированным другим скриптом.

@echo off
set "domain=mydomain.TLD"
set "dns_host=dnshost.TLD"
set "NS1=ns1.dnshost.TLD"
set "NS2=ns1.dnshost.TLD"
set "neutralDNS=8.8.8.8"
set "timeout=60"
set "outputfile=myfile.txt"
FOR /L %%A IN (1,1,200) DO (
ECHO ************************************************  
ECHO ********* Checking %domain% On %NS1% //  %NS2%
ECHO ************* Loop Count :: %%A  %Time% 
ipconfig /flushdns
timeout  %timeout% 
ping %domain%
ping %dns_host%
ping %NS1%
ping %NS2%
nslookup %domain% %neutralDNS%
nslookup %dns_host% %NS1% 
nslookup ns1.%dns_host%

REM ... Loop goes on here, commands are not really important
REM host %dns_host%// we are not on *nix !
REM dig  %dns_host% @%neutralDNS% // we are not on *nix !
)

Я хотел бы добавить вывод цикла как к файлу, так и к экрану, но когда я пытаюсь добавить вывод с помощью >> myfile.txt, примерно так:

 FOR /L %%A IN (1,1,200) DO (
    ECHO ************* Loop Count :: %%A  %Time% 
   ......
    ) >> %outputfile%

Выполнение просто не удается, и когда я пытаюсь вывести в файл с > myfile, примерно так:

 FOR /L %%A IN (1,1,200) DO (
    ECHO ************* Loop Count :: %%A  %Time% 
   ......
    ) > %outputfile%

Файл будет перезаписываться при каждой итерации.

Другая проблема заключается в том, что в обоих случаях экран не выводится, за исключением явного эхо.

1 Ответ

1 голос
/ 16 июня 2019

Согласно @ Стефану комментариям и реализации решения бедняков (или исходный код ), которое состоит в создании временного файла, а затем typeстроки, записанные во временном файле.Код для правильной работы можно записать в виде

.
.
.

set "outputfile=myfile.txt"

::Poor's man solution
set "display=> _ & type _ & type _ >> %outputfile%"

FOR /L %%A IN (1,1,200) DO (
ECHO ************************************************ %display%
ECHO ********* Checking %domain% On %NS1% // %NS2% %display%
ECHO ************* Loop Count :: %%A %Time% %display%

::Simple test
ping 127.0.0.1 %display%

.
.
.

)

del /q /f _

Когда цикл завершится, мы должны del / erase временный файл.

Длинное объяснение

Этот фрагмент кода можно разделить на три этапа.Сначала перенаправляет вывод с > на _, затем type содержимое _ и, наконец, добавляет содержимое _ в %outputfile%.Поскольку он идет построчно, мы просто добавляем результат результата каждой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...