|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Условия внутри цикла for |
|
CMD/BAT - [решено] Условия внутри цикла for
|
Пользователь Сообщения: 69 |
Профиль | Отправить PM | Цитировать Доброе утро!
Мне нужно на 120 ПК включить службу сообщений (одноранговая сеть), решил сделать батник с использованием утилит Русимовича, но видно где то допустил ошибку: for /l %%i in (50,1,248) do ( echo PC: 192.168.1.%%i rem Определение доступности узла rem errorlevel=1 - узел не доступен rem errorlevel=0 - узел доступен ping -n 1 192.168.1.%%i | find /I "TTL=" || echo PC: 192.168.1.%%i %ERRORLEVEL%^=1 >>%OUTPUTOFF% echo PC: 192.168.1.%%i >>%OUTPUT% rem Определение доступности узла на уровне PsTools rem errorlevel <> 0 - узел не доступен rem errorlevel=0 - узел доступен psservice \\192.168.1.%%i -u %login% -p %pass% query Messenger >>%OUTPUT% if %errorlevel%=="0" goto service :service echo PC: 192.168.1.%%i >>%OUTPUTAUTO% rem переключение службы в автоматический режим psservice \\192.168.1.%%i -u %login% -p %pass% SETCONFIG Messenger auto >>%OUTPUTAUTO% rem запуск службы psservice \\192.168.1.%%i -u %login% -p %pass% start Messenger >>%OUTPUTSTART% echo PC: 192.168.1.%%i %errorlevel% >>%OUTPUTSTART% ) Недоступные узлы: PC: 192.168.1.50 0=1 PC: 192.168.1.55 0=1 PC: 192.168.1.56 0=1 PC: 192.168.1.58 0=1 PC: 192.168.1.59 0=1 Доступные узлы: PC: 192.168.1.51 0=0 PC: 192.168.1.52 0=0 PC: 192.168.1.53 0=0 PC: 192.168.1.54 0=0 PC: 192.168.1.238 0=0 Если я вместо #6 ping -n 1 192.168.1.%%i | find /I "TTL=" || echo PC: 192.168.1.%%i %ERRORLEVEL%^=1 >>%OUTPUTOFF% #6 ping -n 1 192.168.1.%%i | find /I "TTL=" || goto end ... #20 :end #21 echo PC: 192.168.1.%%i %ERRORLEVEL%^=1 >>%OUTPUTOFF% #22 ) rem завершение цикла Я не могу найти ошибку (((((( |
|
Отправлено: 10:44, 01-08-2012 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать blackmane, добавьте в начало скрипта строку:
Надеюсь, что переменные (%OUTPUTOFF% %OUTPUT% и т.д.) у Вас где-то в начале скрипта тоже определены) Эту строку: ping -n 1 192.168.1.%%i | find /I "TTL=" || echo PC: 192.168.1.%%i %ERRORLEVEL%^=1 >>%OUTPUTOFF% ping -n 1 192.168.1.%%i | find /I "TTL=" || echo PC: 192.168.1.%%i !ERRORLEVEL!=1 >>%OUTPUTOFF% |
Последний раз редактировалось gora, 01-08-2012 в 11:54. Отправлено: 11:47, 01-08-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать СПС, правда ничего не получилось, скрипт выходил из цикла на 51 значении, сделал не много по другому:
@echo off chcp 1251 set psservice=psservice set pass=пасс set login=логин for /l %%i in (50,1,248) do ( echo Обработка 192.168.1.%%i... ping -n 1 192.168.1.%%i &&^ echo Обработка 192.168.1.%%i... >>log.txt &&^ %psservice% \\192.168.1.%%i -u %login% -p %pass% query Messenger >>log.txt &&^ %psservice% \\192.168.1.%%i -u %login% -p %pass% SETCONFIG Messenger auto >> log.txt &&^ %psservice% \\192.168.1.%%i -u %login% -p %pass% start Messenger && echo OK >> log.txt ||^ echo %date% %time% PC:192.168.1.%%i - not connected >> logoff.txt ) exit Может кто подскажет, а как сделать так, чтобы for (начало шаг конец) выбирался из текстового файла????, т.е. по прохождении вышеукзанного будет создавться файл со значениями не доступных %%i, нужно чтобы при выходе из цикла включался другой, где начало - первое значение в файле шаг следующая строчка конец - конец файла. Как то так. |
Последний раз редактировалось blackmane, 01-08-2012 в 15:00. Отправлено: 14:48, 01-08-2012 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата blackmane:
|
|
Отправлено: 20:52, 01-08-2012 | #4 |
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Сам решил ))))
@echo off chcp 1251 set psservice=psservice set pass=пасс set login=логин set OUT=hi_%date%_log.txt set OUToff=hi_%date%_logoff.txt set OUTOK=%date%_log.txt set iptxt=ip.txt for /l %%i in (50,1,248) do ( SetLocal EnableDelayedExpansion echo Обработка 192.168.1.%%i... find /I ".%%i" ip.txt >nul if !errorlevel!==1 (ping -n 1 192.168.1.%%i &&^ echo Обработка 192.168.1.%%i... >>!OUT! &&^ !psservice! \\192.168.1.%%i -u !login! -p !pass! query Messenger >>!OUT! &&^ !psservice! \\192.168.1.%%i -u !login! -p !pass! SETCONFIG Messenger auto >> !OUT! &&^ !psservice! \\192.168.1.%%i -u !login! -p !pass! start Messenger && echo OK >> !OUT! && echo 192.168.1.%%i - OK >>!OUTOK! && echo %%i>>!iptxt! ||^ echo !date! !time! PC:192.168.1.%%i - not connected >> !OUToff!) else (echo DONE!) endLocal ) exit |
|
Отправлено: 10:01, 02-08-2012 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR? | alex_past | Скриптовые языки администрирования Windows | 42 | 28-11-2018 16:19 | |
BSOD - Замучил синий екран смерти (см внутри) BCCode: a Код языка: 1049 + внутри доп вопрос | Alexeydt | Тест-форум | 2 | 14-04-2012 16:44 | |
CMD/BAT - Проверка условия | Доктор Ливси | Скриптовые языки администрирования Windows | 11 | 19-01-2012 16:01 | |
CMD/BAT - Условия на удоления в cmd | zinteco | Скриптовые языки администрирования Windows | 1 | 24-03-2010 19:58 | |
Разное - Льготные условия приобретения Windows 7 | okshef | Microsoft Windows 7 | 1 | 25-01-2009 22:14 |
|