Показать полную графическую версию : [решено] Помогите с findstr
dima05605
27-10-2012, 21:05
Доброго времени суток! Недавно столкнулся с проблемой: с помощью 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 все работает. Заранее спасибо!
dima05605, упакуйте полученный файл «ip_geo.php» с «UKRAINE» архиватором и выложите сюда.
dima05605
27-10-2012, 21:41
Залил на rghost)
http://rghost.ru/41194980
Немного поковырялся, теперь находит UKRAINE, но в переменную записывает не слово, а букву t. Не вижу связи между ними.
dima05605, либо перестаньте называть пакетные файлы именами команд («findstr.bat»), либо научитесь писать полные имена (и, возможно, пути) у команд: «findstr.exe».
dima05605
28-10-2012, 00:19
Ээ, немного не понял)
Вы назвали пакетный файл именем «findstr.bat». Внутри этого пакетного файла Вы вызываете его же:
for /F "delims=xxx" %%a in ('findstr "UKRAINE" ip_geo.php') do set a=%%a
а отнюдь не приложение «%SystemRoot%\System32\findstr.exe». В результате Вы получаете теоретически бесконечную рекурсию — до переполнения.
Избежать этой ошибки можно было двумя путями:
…либо перестаньте называть пакетные файлы именами команд («findstr.bat»), либо научитесь писать полные имена (и, возможно, пути) у команд: «findstr.exe». »
dima05605
28-10-2012, 13:55
Переименовал на 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
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
Спасибо, последний код работает, но при поиске русских слов пишет:
Режим вывода команд на экран (ECHO) отключен.
Кто-то знает как исправить данную проблему?
Foreigner
28-10-2012, 15:43
dima05605, не раз сталкивался с такой проблемой. Попробуй заменить findstr на find. Findstr.exe походу испытывает трудности с кириллицей.
dima05605
28-10-2012, 15:47
В текстовике поставил Russia. Но при поиске "Страна:" пишет Ukraine. Если в поиск вбить "State:" и в текстовике тоже заменить State:Russia, то все работает. В чем проблема?
dima05605
28-10-2012, 16:53
Ладно, спасибо всем! Хоть я получил немного не то что нужно, но все же вы мне сильно помогли! :)
dima05605
28-10-2012, 17:52
Здесь ошибка!
@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
Если в ip_geo.txt изменить Ukraine на Russia например, то выведет Ukraine все равно »
Там два раза встречается вхождение "Страна: ......<br>" В переменную попадает второе. Наверное там осталась "Ukraine"
dima05605
28-10-2012, 18:12
Сейчас попробую
От жеж блин) Вот если echo off убрать, то видно что сначала присваевается россия, потом украина, я код крутил как мог, а оказалось в тексте 2 слова "Страна"!
Спасибо большое! Не знаю как даже отблагодарить! :)
Вот если echo off убрать, то видно …»
Обычно этим и пользуются для отладки. Разве что я просто использую rem для комментирования «@echo off»: так проще.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.