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

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

dima05605 27-10-2012 21:05 2013404

Помогите с findstr
 
Доброго времени суток! Недавно столкнулся с проблемой: с помощью wget я качаю страницу с http://ip-whois.net/ip_geo.php. После того как я скачал страницу, мне надо найти строку в файле. С помощью простой команды "findstr" я могу найти строку, которая мне надо, а вот для того чтобы занести найденную строку в переменную я использую:

for /F "delims=xxx" %%a in ('findstr "UKRAINE" ip_geo.php') do set a=%%a

С другими файлами все прекрасно работает, а вот в случае с поиском строки "UKRAINE" просто один раз мигнула консоль и все. Вот сам код:

@echo off
for /F "delims=xxx" %%a in ('findstr "UKRAINE" ip_geo.php') do set a=%%a
echo %a%
pause

То есть мне надо чтобы показывало переменную, а не закрывалось окно. С простым findstr все работает. Заранее спасибо!

Iska 27-10-2012 21:27 2013417

dima05605, упакуйте полученный файл «ip_geo.php» с «UKRAINE» архиватором и выложите сюда.

dima05605 27-10-2012 21:41 2013429

Залил на rghost)

http://rghost.ru/41194980

Немного поковырялся, теперь находит UKRAINE, но в переменную записывает не слово, а букву t. Не вижу связи между ними.

Iska 27-10-2012 22:43 2013465

dima05605, либо перестаньте называть пакетные файлы именами команд («findstr.bat»), либо научитесь писать полные имена (и, возможно, пути) у команд: «findstr.exe».

dima05605 28-10-2012 00:19 2013524

Ээ, немного не понял)

Iska 28-10-2012 03:50 2013573

Вы назвали пакетный файл именем «findstr.bat». Внутри этого пакетного файла Вы вызываете его же:
Цитата:

Цитата dima05605
Код:

for /F "delims=xxx" %%a in ('findstr "UKRAINE" ip_geo.php') do set a=%%a

а отнюдь не приложение «%SystemRoot%\System32\findstr.exe». В результате Вы получаете теоретически бесконечную рекурсию — до переполнения.

Избежать этой ошибки можно было двумя путями:
Цитата:

Цитата Iska
…либо перестаньте называть пакетные файлы именами команд («findstr.bat»), либо научитесь писать полные имена (и, возможно, пути) у команд: «findstr.exe». »


dima05605 28-10-2012 13:55 2013684

Переименовал на poisk.bat и написал туда

for /F "delims=xxx" %%a in ('findstr.exe "UKRAINE" ip_geo.txt') do set a=%%a
echo %a%

выводит не UKRAINE, а букву t

Foreigner 28-10-2012 14:10 2013687

dima05605,
А зачем тебе такие разделители "ххх"? На примере из твоего архива:
Код:

@echo off
setlocal
1>nul chcp 1251

for /f "tokens=2 delims=:<" %%i in ('findstr "UKRAINE" ip_geo.txt') do call:set %%i
echo %a%

1>nul (chcp 866 & pause)

goto:eof

:set
set "a=%1"


dima05605 28-10-2012 15:34 2013722

Спасибо, последний код работает, но при поиске русских слов пишет:

Режим вывода команд на экран (ECHO) отключен.

Кто-то знает как исправить данную проблему?

Foreigner 28-10-2012 15:43 2013728

dima05605, не раз сталкивался с такой проблемой. Попробуй заменить findstr на find. Findstr.exe походу испытывает трудности с кириллицей.

dima05605 28-10-2012 15:47 2013729

В текстовике поставил Russia. Но при поиске "Страна:" пишет Ukraine. Если в поиск вбить "State:" и в текстовике тоже заменить State:Russia, то все работает. В чем проблема?

dima05605 28-10-2012 16:53 2013758

Ладно, спасибо всем! Хоть я получил немного не то что нужно, но все же вы мне сильно помогли! :)

dima05605 28-10-2012 17:52 2013795

Здесь ошибка!

@echo off
setlocal
1>nul chcp 1251

for /f "tokens=2 delims=:<" %%i in ('find "Страна" ip_geo.txt') do call:set %%i
echo %a% >> result.txt
1>nul (chcp 866 & pause)

goto:eof

:set
set "a=%1"


Если в ip_geo.txt изменить Ukraine на Russia например, то выведет Ukraine все равно

Foreigner 28-10-2012 18:02 2013805

Цитата:

Цитата dima05605
Если в ip_geo.txt изменить Ukraine на Russia например, то выведет Ukraine все равно »

Там два раза встречается вхождение "Страна: ......<br>" В переменную попадает второе. Наверное там осталась "Ukraine"

dima05605 28-10-2012 18:12 2013815

Сейчас попробую

От жеж блин) Вот если echo off убрать, то видно что сначала присваевается россия, потом украина, я код крутил как мог, а оказалось в тексте 2 слова "Страна"!

Спасибо большое! Не знаю как даже отблагодарить! :)

Iska 28-10-2012 19:49 2013890

Цитата:

Цитата dima05605
Вот если echo off убрать, то видно …»

Обычно этим и пользуются для отладки. Разве что я просто использую rem для комментирования «@echo off»: так проще.


Время: 18:14.

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