DrZoltsberg
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ilicho42 Цитата: http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=1440 Доброго времени суток! Решил облегчить себе жизнь, но как то получилось не очень... В сети есть несколько проксиков и нужно перевести пользователей qip с одного проксика на другой. Хранит qip конфиг в текстовом файле и нужно всего лишь заменить там несколько строк. ... нужно изменить строку Port=5190 на Port=443 | Небольшой парсер с прогресс каунтером тебе в помощь :) надеюсь что не поздно. Код: @echo off setlocal enabledelayedexpansion :: Задать путь к inputfile для парсинга. Результат в outputfile. set inputfile="input.txt" set outputfile="output.txt" set tempfile="temp.txt" :: В ctrlenter символ ctrl-enter счётчика обработанных линий. Набирается в Edit. set ctrlenter= set /a linecount=0 if exist %outputfile% del %outputfile% >NUL >%tempfile% find /N /V "bla_bla_bla" %inputfile% for /f "skip=2 tokens=1,2 delims==" %%a in ('type %tempfile% 2^>NUL') do (call :parser "%%a" "%%b") if exist %tempfile% del %tempfile% >NUL goto :eof :parser set /a linecount+=1 <NUL set /p progress=%ctrlenter% for /l %%a in (0,1,18) do <NUL set /p progress=%progress%%ctrlenter% <NUL set /p progress=%progress%Parsing line %linecount% if "%~2"=="" (set parsevalue=%~2) else (set parsevalue==%~2) :: Заменяемые значения :: :: if "%~2"=="xxx1" set parsevalue==yyy1 :: if "%~2"=="xxx2" set parsevalue==yyy2 :: ... :: :: Внимание ! в файле inputfile значение вида AAA= т.е. пустое равенство должно :: заканчиваться хотя бы одним пробелом после знака равенства. Также не перевариваются :: и вызывают крах скрипта или неверный результат в outputfile спецсимволы < > & | ^ % " ' if "%~2"=="5190" set parsevalue==443 set string=%~1 :parsenextchar if "%string:~0,1%"=="]" goto parseline set string=%string:~1% goto parsenextchar :parseline set string=%string:~1% if "%string%"=="" echo.>>%outputfile%&goto :eof >>%outputfile% echo %string%%parsevalue% goto :eof | ЗЫ: Да если просто скопировать скрипт в файл то работать не будет. Причина в том, что при копировании со страницы в конец каждой строки добавляется пробел :( (как и указано вверху страницы). Чтобы работало после копирования скрипта в файл необходимо удалить добавленные пробелы в конце каждой строки. Нераспознаваемый символ в кодировке ASCII (DOS) удалять не нужно. ЗЗЫ: Другой вариант парсера, не требующий чтобы равенство вида AAA= заканчивалось пробелом (т.е. не требующий какого-либо предварительного редактирования модифицируемого файла) дабы не заспамлять форум находится здесь http://d e p o s i t f i l e s . c o m/files/j1nxf9y8q Подопытный файл из квипа: http://d e p o s i t f i l e s . c o m/files/cfcays3mx | Всего записей: 3 | Зарегистр. 20-11-2008 | Отправлено: 18:06 20-11-2008 | Исправлено: DrZoltsberg, 23:54 25-11-2008 |
|