Как я понял ТЗ:
1. Батник запускается либо ручками либо по заданию - т.е. все время на компе не висит (это хорошо, т.к. CMD как и любой интерпретатор дико жрет ресурсы - CPU time) и надо просто собирать лог когда пинги не проходили (удачные пинги нас мало интересуют). Логи разбиваются по датам (в примере сортировка жутко неудобная - поверь, я так когда-то по заданию бэкапил базы 1С а потом разбирался где и что). Но я бы держал все в одном файле.
2. Если такая бякость как отваливание интерфейса случается, то желательно держать батник всегда, но чтобы он "не светился" и постараться не слишком нагружать проц.
как вариант относительно универсальное решение, но пинг какого-то конкретного адреса мне не совсем понятен - либо это шлюз ISP либо пинг внешнего IP удаленного офиса, где как раз проблемы и бывают. Если пингуется что-то из своей сети для тестирования своей сети, то желательно пинговать сразу несколько адресов, например шлюз ISP, какой-нить "ya.ru", "cnn.com", "w3c.org" - если хоть кто-то откликнулся - значит иНет скорее есть, чем нет, а проблема не у Вас, а у пингуемого ресурса...
Код:

@Echo off
SetLocal EnableExtensions
rem Флаг подпроцесса. Устанавливается в режиме Multi. Запуск батника с параметром "." запрещен!
if "%1"=="." Goto Once
set Name=%~dpn0
set Ext=%~x0
rem Значения "по-умолчанию"
set IP=ya.ru
set Wait=120
set LogFile=%Name%.txt
set Log=SingleLog
rem set Log=MultiLog
set Mode=Once
rem set Mode=Multi
rem Чтение и обработка параметров. Порядок любой, возможны повторы.
:ParamChk
cls
rem Инфа для сообщения о неправильном параметре. Если все ОК, то инфа пропадет.
if "%1"=="" Goto %Mode%
Echo Error! Wrong Parameter!
Echo.
Echo Use: %Name% [/W nnn] [/IP addr] [/O] [/i] [/S] [/M]
Echo.
Echo /W - Wait for nnn Seconds between Tests
Echo /IP - Destination Address (IP or FQDN). * If Address FQDN (like ya.ru) - Test can fail on DNS
Echo /O or /I - Instance: Once or Infinite (use TaskManager to Break CMD service)
Echo /S or /M - LogFile Name: Single (ChkNet.txt) or Multi (Based on Date, Ex: ChkNet_2009-12-23.txt)
Goto P%1
:P/W
if not "%2"=="" set Wait=%2
shift & shift & goto ParamChk
:P/IP
if not "%2"=="" set IP=%2
shift & shift & goto ParamChk
:P/O
set Mode=Once
shift & goto ParamChk
:P/I
set Mode=Multi
shift & goto ParamChk
:P/S
set Log=SingleLog
shift & goto ParamChk
:P/M
set Log=MultiLog
shift & goto ParamChk
:Once
rem дата/время в виде yyyy-mm-dd_hh-mm-ss - очень удобно для имен файлов и логов
set tm=%time::=-%
set tm=%date:~6,4%-%date:~3,2%-%date:~0,2%_%tm:~0,-3%
goto %Log%
:MultiLog
rem Высчитываем новое имя файла Лога (если включен режим /M)
set LogFile=%Name%_%tm:~0,10%.txt
:SingleLog
rem Пингуем ресурс и если ошибка - записываем в лог текущие дату/время. * После команды Ping сразу должна идти команда IF
ping -n 1 %IP% >nul
if errorlevel 1 echo %tm%>>%LogFile%
if %Mode%==Once exit
rem Задержка перед следующим пингом. Адрес лучше не менять
ping -n %Wait% 127.0.0.1 >nul
Goto Once
:Multi
Запуск самого себя в виде процесса - т.е. как "программа" батник виден не будет.
start /b /low %Name%%Ext% .