Любой сисадмин рано или поздно сталкивается с ситуацией, когда юзер, который обращается с жалобами на проблемы, весьма далек от технических нюансов (классическая ситуация – какая-то блондинка, максимально подробное описание проблемы у которой сводится к «инет не работает»). Вот для таких случаев может пригодится нижеприведенный сценарий, результат работы которого юзер каким-то образом должен передать админу.

set cur_time=%time:~0,8%
set cur_date=%date%
set f=result.txt
set TMP=defgate.rsl
set STEPS=8
echo Please wait a few minutes. Diagnostics in progess…
echo %cur\_time% %cur\_date% >> %f%
ipconfig /all >> %f%
echo Step 1 of %STEPS% completed.
tracert -d 195.214.195.105 >> %f%
echo Step 2 of %STEPS% completed.
tracert -d -h 7 avz.org.ua >> %f%
echo Step 3 of %STEPS% completed.
tracert -d -h 7 mail.ru >> %f%
echo Step 4 of %STEPS% completed.
route print >> %f%
echo Step 5 of %STEPS% completed.
netstat -b >> %f%
echo Step 6 of %STEPS% completed.
netsh diag show ieproxy >> %f%
echo Step 7 of %STEPS% completed.
netsh diag show gateway > %TMP%
FOR /F "skip=3 tokens=3"; %%I IN (%TMP%) DO (
    ping -n 50 %%I >> %f%
    route print %%I >> %f%
    goto END
)
:END
erase %TMP%
echo Diagnostics complete. Please, send the file %f% to support team.

Особенно заслуживает внимания конструкция FOR /F "skip=3 tokens=3"; %%I IN (%TMP%) которая представляет собой некоторый аналог связки команд tail и awk (или cut) в Unix-системах. Ключ skip=3 означает, что в файле %TMP% будет пропущено первые 3 строки, а tokens=3, означает, что в параметр цикла %%I будет подставлена 3-яя по счету подстрока в 4-ой строке файла (подстроки по умолчанию разделяются пробелами). Так что даже не имея под рукой любимого bash-а, в Windows можно как-то выкрутиться, всего-то почитав хелп «for /?»

Комментарии