Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск строки в файле (http://forum.oszone.net/showthread.php?t=271127)

tmpnikl 01-11-2013 06:19 2245126

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

Elven 01-11-2013 09:31 2245188

после 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


Iska 01-11-2013 09:42 2245193

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

tmpnikl 05-11-2013 03:57 2247593

спасибо....

Гуллипут 05-11-2013 20:54 2248110

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" явно указывает на присутствие ошибки (при поиске строки) и на обработку этой ошибки, и не приходится мысленно переворачивать "ошибку" в "не-ошибку".

tmpnikl 08-11-2013 04:56 2249772

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

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

Foreigner 08-11-2013 07:30 2249798

Цитата:

как можно проверить какой код получил errorlevel »
Зачем здесь errorlevel? Просто:
Код:

ping -n 1 server | 1>nul findstr /i "ttl=" && (

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

) || (

    echo No server

)


tmpnikl 08-11-2013 09:04 2249824

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

Гуллипут 08-11-2013 20:11 2250244

Цитата:

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

echo errorlevel=%errorlevel%

Foreigner 08-11-2013 21:18 2250283

tmpnikl:
Цитата:

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

@echo off
exit /b 2013

А потом посмотреть 'echo %errorlevel%', разумеется в одной сессии. И, да, не все приложения возвращают код возврата.


Время: 17:17.

Время: 17:17.
© OSzone.net 2001-