Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск строки в файле

Ответить
Настройки темы
CMD/BAT - Поиск строки в файле

Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите написать bat файл, мне надо проверить есть ли строка в файле
ping -w 200 -n 2 server >x
find "TTL" x
А дальше не знаю, как продолжить...
если есть строка TTL
то %windir%\explorer.exe /n, \\server
else
echo No server

Отправлено: 06:19, 01-11-2013

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


после find используй if errorlevel
например так
Код: Выделить весь код
ping -w 200 -n 2 server >x
find "TTL" x
if errorlevel 0 (
%windir%\explorer.exe /n, \\server
exit /b
)
echo No server
правда я не понимаю зачем это через файл делать, уровень errorlevel прекрасно возвращает и ping, а если сервер доступен, то он и так доступен, даже не ясно зачем целых два пакета. это будет выглядеть приблизительно так:
Код: Выделить весь код
ping -w 200 -n 1 server
if errorlevel 0 (
%windir%\explorer.exe /n, \\server
exit /b
)
echo No server

Отправлено: 09:31, 01-11-2013 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Elven, искать TTL нужно, ибо одного errorlevel недостаточно. tmpnikl, примеры неоднократно были, поищите по словосочетаниям ping, find и TTL.

Отправлено: 09:42, 01-11-2013 | #3


Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо....

Отправлено: 03:57, 05-11-2013 | #4


Пользователь


Сообщения: 70
Благодарности: 19

Профиль | Отправить PM | Цитировать


Elven, а почему "if errorlevel 0" ? Так всегда будет выполняться только ветка внутри скобок.
Надо заменить на "if not errorlevel 1".
По крайней мере, вплоть до XP это так, поскольку команда вида "if errorlevel ..." проверяет не на точное равенство errorlevel указанному значению, а на "больше или равно".
Или можно написать "if %errorlevel%==0". Тогда проверка будет на равенство.
Таким образом, приходим к варианту:

ping -w 200 -n 2 server >x
find "TTL" x
if errorlevel 1 (echo No server) else (
%windir%\explorer.exe /n, \\server
exit /b
)

Поясню: я заменил "if not errorlevel 1" на "if errorlevel 1" с перестановкой веток, чтобы понятнее было, что написано. Потому что "if errorlevel 1" явно указывает на присутствие ошибки (при поиске строки) и на обработку этой ошибки, и не приходится мысленно переворачивать "ошибку" в "не-ошибку".

Последний раз редактировалось Гуллипут, 05-11-2013 в 21:01.


Отправлено: 20:54, 05-11-2013 | #5


Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ещё раз спасибо за ответ, а то я тоже не мог понять, почему у меня при errorlevel 0, некорректно отрабатывал батник(при двух разных исходах, все равно выполнялась первая ветка), по интуиции стал ставить в начале 1, и вроде было нормально, непонятно, но работало, а теперь стало понятно почему так...правда не совсем понятна тавталогия ошибка в не обшибку, но суть понятна, в начале надо ставить проверку на ошибки(1,2.. и т.д.), и рассматривать эту ветку...

Да, совсем забыл..., если можно, подскажите(для отработки батника), как можно проверить какой код получил errorlevel,
ну что-нибудь типа
echo "errorlevel="+str(errorlevel) (Здесь контектация строк, как сделать в батнике это сцепление строк пока не знаю)

Отправлено: 04:56, 08-11-2013 | #6


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата:
как можно проверить какой код получил errorlevel »
Зачем здесь errorlevel? Просто:
Код: Выделить весь код
ping -n 1 server | 1>nul findstr /i "ttl=" && (

    %windir%\explorer.exe /n, \\server

) || (

    echo No server

)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:30, 08-11-2013 | #7


Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Просто разные программы могут запускаться, и без документации, и не только пинг, поэтому чтоб знать, что получает системная переменная errorlevel, и хотелось бы знать, какое там(errorlevel) значение с выводом на экран...

Отправлено: 09:04, 08-11-2013 | #8


Пользователь


Сообщения: 70
Благодарности: 19

Профиль | Отправить PM | Цитировать


Цитата tmpnikl:
Да, совсем забыл..., если можно, подскажите(для отработки батника), как можно проверить какой код получил errorlevel, »
echo errorlevel=%errorlevel%

-------
Разумный человек приспосабливается к миру, неразумный пытается приспособить мир к себе. Поэтому прогресс делают люди неразумные. (Дж. Б. Шоу)


Отправлено: 20:11, 08-11-2013 | #9


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


tmpnikl:
Цитата:
Просто разные программы могут запускаться, и без документации, и не только пинг, поэтому чтоб знать, что получает системная переменная errorlevel, и хотелось бы знать, какое там(errorlevel) значение с выводом на экран... »
Есть успех == 0, есть ошибка == 1. Это общепринятые значения, а для всего остального должна быть документация. Ты тоже можешь установить errorlevel в батнике:
Код: Выделить весь код
@echo off
exit /b 2013
А потом посмотреть 'echo %errorlevel%', разумеется в одной сессии. И, да, не все приложения возвращают код возврата.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:18, 08-11-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск строки в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox ultrarare Скриптовые языки администрирования Windows 11 03-07-2013 14:37
CMD/BAT - Поиск и изменение строки в файле. climber89 Скриптовые языки администрирования Windows 2 31-01-2013 13:25
[решено] [PHP] Поиск строки в файле KrotMen Вебмастеру 3 12-10-2012 15:25
VBS/WSH/JS - Поиск\редактирование строки в текстовом файле pavvel Скриптовые языки администрирования Windows 2 11-04-2012 16:38
[решено] поиск строки в WORD файле.... garanov AutoIt 3 19-03-2010 09:16




 
Переход